这是一个简单的例子:
假设我有一个与地址表具有一对多关系的客户表(客户可以有多个送货地址,但送货地址只能属于一个客户).
Customer Table
-------------
customer_id (PK)
Address Table
-------------
address_id (PK)
customer_id (FK)
Run Code Online (Sandbox Code Playgroud)
现在我希望每个客户都能够指定默认的送货地址.
我可以想到两种方法,但都有缺点.
选项1
将一个布尔列添加到名为"is_default"的地址表中.
优点
缺点
选项2
在Customer表中添加一个名为"address_id"的列,并将其设为外键(如果不存在地址,也允许空值).
优点
缺点
每次我决定添加某种默认元数据时,我都必须向Customers表添加一个新的索引列.
看起来像一个黑客
我的问题是,有没有一种标准的方法来处理我忽略的这种情况?当然还有其他选项(可能会创建一个EAV默认选项表?)但我更喜欢保持它尽可能简单,因为对现有代码库进行了更改,所以我不想破坏任何东西.
(也许创建一个 EAV 默认选项表?)
我会这样做,特别是如果您担心破坏现有代码。
Customer_Defaults
------------------------------------
customer_id PK, FK -> Customer
default_shipping_address_id FK -> Address
Run Code Online (Sandbox Code Playgroud)
不是很整齐吗?通过将整个内容放入一个单独的表中,您可以保留现有的表。如果您使用某种 ORM 层,则可以直接查询这个新表上的对象,然后您可以走到 Address 对象。甚至不需要将新对象引入现有的客户或地址对象。
归档时间: |
|
查看次数: |
291 次 |
最近记录: |