不同角色的数据建模

ray*_*ygo 5 database-design database-recommendation design-pattern

这是我在这里的第一篇文章,所以我希望它足够清楚。我想为销售、购买、出租和修理某种产品的人制作一个应用程序。

我需要创建一个数据库来保存产品和帐户的数据(包括登录名和个人信息)。我的问题是,“帐户”可以是卖方、买方、承租人、修理工,可以是全部、无或某些。卖家、买家、租房者和修理者会有不同的领域,就像卖家可以发布产品,并保存一些只有卖家才能拥有的信息,修理者只能发布他的列表,但卖家,也可以是固定器。买家也可以出售产品并喜欢其他人。卖家和买家之间的区别在于卖家必须是一家公司,等等……

我对数据库的想法是这样的:

产品

product_id
product_name
owner_id (account_id)
Run Code Online (Sandbox Code Playgroud)

帐户

account_id
email
password
Run Code Online (Sandbox Code Playgroud)

卖方

seller_id
account_id
business_name
address
[some fields that only sellers would have...]
Run Code Online (Sandbox Code Playgroud)

买方

buyer_id
account_id
first_name
last_name
address
[some fields that only buyer would have...]
Run Code Online (Sandbox Code Playgroud)

承租人

renter_id
account_id
business_name
address
[some fields that only renter would have...]
Run Code Online (Sandbox Code Playgroud)

固定器

fixer_id
account_id
business_name
address
years_experience
[some fields that only fixers would have...]
Run Code Online (Sandbox Code Playgroud)

然后是其他表,如 account_favorite(用于保存有关哪些产品已被选为收藏的信息)。

现在,我觉得我这样做的方式不是正确的方式。还想如果将来我考虑其他事情,例如“收集器”,我将不得不创建一个新表。因为这是一个会被很多人使用的应用程序,所以我必须关心速度,但我也必须关心人们维护和分析数据。我希望这篇文章很清楚,如果不清楚,请问我。

Jon*_*des 1

如果用户可以扮演的角色非常不同,那么是的,您走在正确的道路上。如果它们有共同的字段,则将它们放入共享Accounts表中。如果各个角色表中只剩下几个字段,您可能应该放弃它们,而只拥有一个Accounts包含一些备用列的表。

权衡是更多表的复杂性更高,但(可能)使用一些窄表比单个宽而长的表具有更好的性能。我的正常倾向是从一个更简单的模型开始,然后仅在必要时优化性能,但考虑到重组数据库的痛苦,采用您从一开始就描述的更灵活的模型可能是值得的。