mysql - 我应该如何构建具有松散关系的 SQL 数据库

标签 mysql sql database database-design backend

我想这更像是一个哲学问题。我有一件商品有 4 种变化。这些变体将共享大约 80% 的列。该项目是一个作品集示例,其变体是摄影/视频/网络/图形。他们将共享列名称,例如客户、日期等。

我的问题是,我应该为每个变体准备 1 个表,还是为 1 个基表和一个用于特定变体列的附加表。我“永远”不需要同时拉下照片/网络示例或其他什么。

尽管它相当基本,但我不确定如何在 Google 上搜索它

最佳答案

你们之间是一对一的关系。关键问题是其他表如何引用该实体。

共有三个选项:

  1. 所有引用均指向父实体。例如,所有商品都有价格历史记录、类别或评论,并且引用仅针对父级。
  2. 所有引用内容均针对 child 。例如,照片中可能包含对象,视频可能包含制作者列表,等等。
  3. 引用文献可以是其中任何一个。

答案是什么? (1) 建议所有行都应位于一个表中,并为所有人共享一个 id。 (2) 建议每个变体的行应位于一个表中。

(3) 有点困难。我会推荐一个包含 80% 列的父表。然后 children 和剩下的人一起坐 table 。子表的主键与父表的主键相同(是的,一列可以既是主键又是外键)。

对于这种情况,您需要做一些工作来确保给定的父实体恰好出现在一个子表中。这可以通过外键和触发器(在 MySQL 中)来处理。

关于mysql - 我应该如何构建具有松散关系的 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49330670/

相关文章:

php - Javascript:如何从输入表格的内容中找到相似的短语或文本?

php - sql查询只更新一个字段

sql - 如何全范围均等地减少SQL查询的结果行数?

mysql - 如何提高MySQL组复制的性能?

node.js - 如何在MongoDB中为共同的 friend 建模

php - SQLSTATE[HY093] : Invalid Parameter number - PDO Select statement

php - 从 mysql 中读取每行 50 个字符的 100 行或从文本文件中读取它们更快吗?

SQL 服务器 : nesting elements with FOR XML PATH

mysql - 为前 n 个不同的元素选择行(两列或更多列)

javascript - 使用 Node JS 在 mongoose 中存储多个文本的理想方法是什么?