为地址变更+定价创建正确的数据库表结构

时间:2018-03-23 01:02:52

标签: mysql sql database postgresql database-design

我是否有点难以理解我是否可以更轻松地更改地址。我会解释一下情况:

基本上我有三个实体,学生,地址,学生地址。学生有很多地址,因为他们可以快速改变(特别是寄养孩子/无家可归的孩子)。很难改变它们。但是,根据我希望用户附加的每个地址(通过UI输入),通过巴士服务选择该学生所需的价格。所以我最初的想法是,好吧,让我在我的连接表'StudentsAddresses'上添加一个名为'dailyPrice'的列,这是学生每天获取的成本,另一列称为'adjustmentPrice',这是一个额外的任何需要额外工作来接收学生的特殊情况的费用。我的想法会给我带来问题,我将来会有更多学生吗?管理会变得更难吗?

我想到的另一个选择是创建一个名为Pricing的新表。另一个名为 StudentsAddressesPricing 的连接类型表 StudentsAddressPricing有三列,

studentId 
addressId 
pricingId

每个字段将三者连接在一起。因此,如果我需要学生,他们的地址和定价,我会查询此表并急切地加载学生,地址和定价。这种方法看起来更清洁,因为我已经抽出了一些定价吗?试图确定最好的方法来解决这个问题而不必担心将来会出现很多令人头疼的事情,因为我不想添加更多与价格相关的属性或地址相关。

然后我甚至想,如果一天的定价不同,那该怎么办?我怎么会考虑这个。我需要一种不同的实体来处理吗?是否有很多连接会损害我的应用程序性能?

只是寻找其他人如何做到这一点的一些见解,并批评为什么我会失控。

1 个答案:

答案 0 :(得分:2)

您应该问自己的主要问题是:价格取决于什么?

如果价格由地址确定,您也可以将其添加到addresses。如果价格也取决于学生(例如,取决于他们的财务状况),将其放入studentsaddresses是有意义的。

换句话说:存储价格的表应该具有确定价格的表外的所有内容的外键。如果这使它适合其中一个现有表格,请将其保留在那里。