作为对 ZZ-bb 的回应,我会尽力澄清,尽管我认为 ZZ 已经回答了这个问题(谢谢 ZZ-bb)......
我想在数据库中表示剪贴板内容。作为用户的想法可以将项目添加到剪贴板,稍后再回来,仍然可以访问他们的剪贴板。
用户可以将图像、文件、文本块等存储到剪贴板。
这就是我的想法
- 1 个用户到 1 个剪贴板
- 1 个剪贴板到多个
cb_items
现在问题来了。我想cb_item
描述从字符、一些文本到图像 url 或文件位置的任何内容,也许是 glob,不确定。
在这个阶段,我可以只描述一个cb_item
包含条目可能需要的所有可能列的表格行,或者我可以以某种方式创建一个“多态”FK ...
要做到这一点,我想。
- 1
cb_item
比1type
- 1
cb_item
比1typed_cb_item
然后使用类型来确定要查找的表typed_cb_item
。
例如
cb_item #1 => { IMAGE_TYPE, 1 }
cb_item #2 => { FILE_GLOB, 1 }
因为item #1
我会typed_cb_item
id
在cb_image_item
表格中查找并获取信息,因为item #2
我会typed_cb_item
id
在cb_fileglob_item
表格中查找并获取信息。
编辑- 表格可能看起来像....
cb_item_tbl
-----------
item_id (PK)
user_id (FK referenceing user)
type_id
typed_item_id >------------+ - - like "typed_cb_item" above
|
cb_image_item_tbl |
----------------- |
img_item_id (PK) <---------+ }
url (string) | }
| } OR based on type_id
cb_file_item_tbl | }
---------------- | }
file_item_id (PK) <--------+ }
file_name
file_size etc etc
maybe a glob
就软件而言,这可以正常工作,但typed_item_id
不能是数据库中的真正外键,所以我不能使用数据库的引用完整性 - 必须通过 s/w 强制执行(尽管 s/w obv不应该破坏它!)并使查询更加复杂。
有没有人有什么建议?我认为这种“多态”FK 的想法可能不是最好的方法,但我喜欢我可以使用它来处理只有与该项目相关的列的项目表。
提前为任何意见或建议干杯...