python - 如何规范化 PostgreSQL 数据库中的表
问题描述
我正在构建社交网络平台,用户可以在其中注册他们的个人资料,填写并为其他人创建活动。我的问题是我不知道创建表的最佳方法是什么。
一个人告诉我应该规范化city
表,意思是 - 他希望我为, country
,创建单独的表university
,company
然后将这些信息与 SQL Query 连接起来,这对我来说很有意义。如果我要让 100 名学生从同一所大学注册,那么我从大学表中只调用一个大学名称而不是填写大学名称的行和行是有意义的 - 这是数据冗余。
但是,另一个人告诉我,这是一种不好的做法,我应该将所有信息放在一个user
表中 - firstName
, lastName
, profileIMG
, universityName
, CompanyName
, cityName
,CountryName
等等。他说更多的桌子会产生更多的问题。
就我而言,我确实理解第一个人的逻辑,但这是我的另一个问题。正如我所提到的,用户填写他们resume
的个人资料,我希望他们最多可以添加他们曾经就读的 3 所大学——学士学位、硕士学位和博士后。同样,我想允许他们与公司合作——他们最多可以添加三个他们以前工作过的公司。
我想我会创建大学表,我会有这个:universityName_1
,,,。我想对桌子做同样的事情。universityName_2
universityName_3
company
这是一个好习惯吗?
也许,我应该只university
用一列创建表UniversityName
,当从数据库中检索数据时,我会在我的 Django 项目中使用 SQL 查询来调用特定大学的特定位置?就像我称哥伦比亚大学为第二名(universityName_2)?
我对这个话题很陌生!我希望我清楚地向您介绍了我的问题!
解决方案
“第二个人”可能不太了解关系数据库。
如果 a与s 和sperson
有关系,则添加一个表,该表具有两者的外键并包含关系的详细信息。该表的主键将是一个复合表,由两个外键组成。对于公司来说也是如此。university
company
person_university
person
university
这是将此类关系存储在数据库中的规范方式。您无法以这种方式建模的是三个限制,但可以由您的应用程序处理。
推荐阅读
- android - 使用自定义分辨率录制 Camera2 视频?
- reactjs - 在 404 上反应无限循环
- python - Imdbpy 获取家长指南
- c++ - 无法捕获异常 std::stoi
- c++ - 为什么它会打印出意外的值?
- python - 即使安装了 Matplotlib,它也不会导入。使用视觉工作室代码
- python - 在虚拟 AWS 实例上使用 python 实现 Web 服务
- mysql - 在 Suse Linux Leap 15.1 上安装 MySQL 5.7.29 时签名验证失败
- c# - 在 C# 8 中使用没有变量的语句
- html - 创建链接到视频数据库的 HTML 页面