【发布时间】:2017-01-28 07:38:06
【问题描述】:
在工作中,我们正在创建一个表单,以允许房地产经纪人提交他们的新开发项目。我们的表单的简化版本如下:
Bedrooms: [Enter a number]
Quantity: [Enter a number]
Add Another | Save
我们允许代理添加多行。然而,目前我们对重复项的验证绝对为零,我认为这允许我们的数据库以两种方式存储相同的数据:
| development_id | bedrooms | quantity |
|----------------|----------|----------|
| 1 | 3 | 1 |
| 1 | 3 | 1 |
| 1 | 3 | 3 |
显然,一行可以代表一个单位或组单位。
我的观点是,我们应该以另一种方式存储开发成果,但当然不能同时存储这两种方式。不幸的是,后端开发人员——我主要是前端——认为这没什么大不了的,对我来说这似乎很荒谬。
举个简单的例子,通过上面的存储,COUNT 来获取有多少有 3 间卧室的开发项目在出售,需要 SELECT COUNT(*) 和考虑 quantity字段。
作为前端开发人员,它似乎主要是表示逻辑,因为在将它们呈现为单个单元列表或将它们组合在一起之间进行转换应该是前端/API 任务,而业务逻辑应该是一个方式或其他。最终我们的表格似乎根本没有标准化。
依我的拙见,development_id, bedrooms 上应该有一个唯一索引。
我的论点正确吗?还是大错特错?
编辑:
澄清一下,所有这些目前都是可能的,所有这些都代表相同的事实,我的论点是应该只有一种方式:
| development_id | bedrooms | quantity |
|----------------|----------|----------|
| 1 | 3 | 1 |
| 1 | 3 | 1 |
| 1 | 3 | 1 |
同:
| development_id | bedrooms | quantity |
|----------------|----------|----------|
| 1 | 3 | 1 |
| 1 | 3 | 2 |
同:
| development_id | bedrooms | quantity |
|----------------|----------|----------|
| 1 | 3 | 3 |
【问题讨论】:
-
你是对的,应该只有一种方法可以在数据库中记录每个事实,并且不允许重复行。不过,我不确定您的唯一索引。 development_id 是做什么用的,当您有多行具有相同的值时,这意味着什么?
-
好吧,我们还有一个主要的
id,所以它更像是:id (pk) | development_id (fk) | bedrooms | phase | floor_area | price | quantity,但简单的事实仍然是不应该有重复 - 对development_id, bedrooms, phase, floor_area, price有一个唯一的约束。跨度> -
“很明显,一行可以代表一个单元或一组单元。”我不清楚,我不明白。也不是“两种方式”。
-
对不起,划掉“两者”这个词。我将更新我的问题以澄清问题,基本上数据库能够记录具有不同表示的相同事实,正如@reaanb 指出的那样。
-
对不起,我没有关注...在我看来,索引应该在
development_id, bedrooms, quantity上,否则我们会记录重复项。开发人员可以添加具有不同卧室的第二个单元。