设计 table 数据库,重复注册还是创建另一个 table?
design table database, duplicated register or create another table?
我想让你知道你对这种情况的看法:
我有一个名为 "movie" 的 table 和这个列
- movie_id
- 名字
- 价格
......等等
电影可以租借、购买或两者兼而有之。
如果我想要一部电影可供租借和购买价格变化,例如:
出租价格:2.50 美元
购买价格:15.45 美元
问题是:
在 table 电影中复制更好吗?
movie_id name price available_for ...... ........
1 300 .50 rent
2 300 .45 purchase
或者再做一个table添加价格信息和available_for?像这样:
Table电影
movie_id name ...... .......... ..........
1 300
2 300
Table电影_available_for
Id movie_id available_for price
1 1 rent .50
2 1 purchase .45
我想知道哪个是最好的解决方案
谢谢!
您的关系方法可能取决于您希望达到的规范化级别。你的问题让我想起了 Boyce–Codd 范式 (BCNF) 与第三范式 (3NF)。
事实上,这个 wiki 页面上有一个与您的问题类似的示例:Boyce–Codd normal form (Wikipedia)
这里有很多理论,但很多时候可以归结为您觉得最舒服的方法或您可以最准确地执行的技术。
就我个人而言,在这种特定情况下,我会使用稍微规范化的形式(您的第二个示例)。这是因为 "available_for" 和 "price" 是相关变量。如果您最终添加了更多关于电影的信息,则该信息可能会被重复多次。如果您添加第三个 "availible_for" 或不同的定价方案(1 天 1.50 美元,5 天 4 美元),您将有非常重要的数据重复。
此外,在代码方面,最好有一个包含嵌套 "availible_for" 对象数组的电影对象(可能将其命名为 "offering" 之类的其他名称)对象。
我建议您规范化您的 available_for 列,因为它重复并且包含很少的字段 only.Store 而在另一个 table 中并创建两个 table 之间的关系。
Movie_Available_type
id int, available_for varchar(50)
然后你可以使用上面thoughtarray指出的两个中的任何一个post。
我会选择:
Movie (movie_id PK, name, purchase_price, rent_price)
并使定价列可以为空。如果不喜欢nulls,可以分解成:
Movie (movie_id PK, name)
PurchasePrice (movie_id PK/FK, price)
RentPrice (movie_id PK/FK, price)
我想让你知道你对这种情况的看法: 我有一个名为 "movie" 的 table 和这个列
- movie_id
- 名字
- 价格 ......等等
电影可以租借、购买或两者兼而有之。 如果我想要一部电影可供租借和购买价格变化,例如:
出租价格:2.50 美元
购买价格:15.45 美元
问题是:
在 table 电影中复制更好吗?
movie_id name price available_for ...... ........
1 300 .50 rent
2 300 .45 purchase
或者再做一个table添加价格信息和available_for?像这样:
Table电影
movie_id name ...... .......... ..........
1 300
2 300
Table电影_available_for
Id movie_id available_for price
1 1 rent .50
2 1 purchase .45
我想知道哪个是最好的解决方案 谢谢!
您的关系方法可能取决于您希望达到的规范化级别。你的问题让我想起了 Boyce–Codd 范式 (BCNF) 与第三范式 (3NF)。
事实上,这个 wiki 页面上有一个与您的问题类似的示例:Boyce–Codd normal form (Wikipedia)
这里有很多理论,但很多时候可以归结为您觉得最舒服的方法或您可以最准确地执行的技术。
就我个人而言,在这种特定情况下,我会使用稍微规范化的形式(您的第二个示例)。这是因为 "available_for" 和 "price" 是相关变量。如果您最终添加了更多关于电影的信息,则该信息可能会被重复多次。如果您添加第三个 "availible_for" 或不同的定价方案(1 天 1.50 美元,5 天 4 美元),您将有非常重要的数据重复。
此外,在代码方面,最好有一个包含嵌套 "availible_for" 对象数组的电影对象(可能将其命名为 "offering" 之类的其他名称)对象。
我建议您规范化您的 available_for 列,因为它重复并且包含很少的字段 only.Store 而在另一个 table 中并创建两个 table 之间的关系。
Movie_Available_type
id int, available_for varchar(50)
然后你可以使用上面thoughtarray指出的两个中的任何一个post。
我会选择:
Movie (movie_id PK, name, purchase_price, rent_price)
并使定价列可以为空。如果不喜欢nulls,可以分解成:
Movie (movie_id PK, name)
PurchasePrice (movie_id PK/FK, price)
RentPrice (movie_id PK/FK, price)