首页 > 解决方案 > 如何规范化 PostgreSQL 数据库中的表

问题描述

我正在构建社交网络平台,用户可以在其中注册他们的个人资料,填写并为其他人创建活动。我的问题是我不知道创建表的最佳方法是什么。

一个人告诉我应该规范化city表,意思是 - 他希望我为, country,创建单独的表universitycompany然后将这些信息与 SQL Query 连接起来,这对我来说很有意义。如果我要让 100 名学生从同一所大学注册,那么我从大学表中只调用一个大学名称而不是填写大学名称的行和行是有意义的 - 这是数据冗余。

但是,另一个人告诉我,这是一种不好的做法,我应该将所有信息放在一个user表中 - firstName, lastName, profileIMG, universityName, CompanyName, cityName,CountryName等等。他说更多的桌子会产生更多的问题

就我而言,我确实理解第一个人的逻辑,但这是我的另一个问题。正如我所提到的,用户填写他们resume的个人资料,我希望他们最多可以添加他们曾经就读的 3 所大学——学士学位、硕士学位和博士后。同样,我想允许他们与公司合作——他们最多可以添加三个他们以前工作过的公司。

我想我会创建大学表,我会有这个:universityName_1,,,。我想对桌子做同样的事情。universityName_2universityName_3company

这是一个好习惯吗?

也许,我应该只university用一列创建表UniversityName,当从数据库中检索数据时,我会在我的 Django 项目中使用 SQL 查询来调用特定大学的特定位置?就像我称哥伦比亚大学为第二名(universityName_2)?

我对这个话题很陌生!我希望我清楚地向您介绍了我的问题!

标签: pythondjangopostgresql

解决方案


“第二个人”可能不太了解关系数据库。

如果 a与s 和sperson有关系,则添加一个表,该表具有两者的外键并包含关系的详细信息。该表的主键将是一个复合表,由两个外键组成。对于公司来说也是如此。universitycompanyperson_universitypersonuniversity

这是将此类关系存储在数据库中的规范方式。您无法以这种方式建模的是三个限制,但可以由您的应用程序处理。


推荐阅读