我有一个包含实体的数据库,如下所示:
1. User entity
2. Event entity (musical concert etc.)
3. Ticket entity
3. Notification entity
Run Code Online (Sandbox Code Playgroud)
我一直在思考三种可能的解决方案:
a) 通知实体具有以下结构:
id serial PRIMARY KEY,
.
.
ticketId integer REFERENCES tickets(id),
eventId integer REFERENCES events(id))
userId integer REFERENCES users(id) // this is present in all three solutions;
Run Code Online (Sandbox Code Playgroud)
这样,Notification 实体就拥有两个外键,但一次只填充其中一个(eventId 或 TicketId),另一个永远为空。
b) 通知实体仅具有与通知本身相关的列,它不包含任何外键(userId 除外)。
关系被提取到另外两个具有此结构的关系映射表中(对于通知-工单关系,同样适用于通知-事件,除了外键引用事件):
id serial PRIMARY KEY,
notificationId integer REFERENCES notifications(id),
ticketId integer REFERENCES tickets(id));
Run Code Online (Sandbox Code Playgroud)
这样,我们创建了类似接口的东西,并且不让通知实体知道任何有关关系的信息(它只有与通知本身和 userId 相关的属性),并且我们还有两个映射关系的附加表。
c) 将Notification实体分成两个不同的实体
(TicketNotification、EventNotification),每个实体具有相同的属性,但外键列不同。
- TicketNotification - …Run Code Online (Sandbox Code Playgroud) 我有三个实体:项目、类别和属性。
AnItem可以是一个,也可以是多个Categories,因此存在 N:M 关系。
Item ItemCategories Categories
id name item_id category_id id name
1 alfa 1 1 1 chipset
1 2 2 interface
Run Code Online (Sandbox Code Playgroud)
根据它们所在的“类别”,可以Item有多个。Attributes
例如,Category“芯片组”中的项目可以具有以下属性:“接口”、“内存”、“技术”。
这些属性有一组不经常更改的预定义值,但它们可以更改。
例如:“内存”只能是 ddr2、ddr3、ddr4。
Attributes CategoryAttributes
id name values category_id attribute_id
1 memory {ddr2, ddr3, ddr4} 1 1
Run Code Online (Sandbox Code Playgroud)
Item“芯片组”中的Category可以访问该属性Attribute,并且只能具有 Null 或该属性的预定义值。
我想使用EnumorJson作为属性值,但我还有另外两个条件:
项目属性
item_id attribute_id value
1 1 {ddr2, ddr4}
Run Code Online (Sandbox Code Playgroud)
1) 如果一个属性出现在2个类别中,并且一个Ithe同时出现在两个类别中,则该属性只能显示一次。
2)我需要使用 的值rank,因此如果一个项目出现两个对应的属性值,如果只有一个,则排名应该更大,否则该值不存在。
3)为属性创建单独的表不是一个选项,因为数量不固定,并且可能很大。
因此,我不知道数据库设计中的最佳选择是限制值并用于订单排名。
我使用 AWS RDS 控制台创建了包含多个架构的 Postgresql v11 数据库的快照备份。然后我从备份创建了一个新实例。该过程似乎运行良好,没有错误。然而,在检查新实例中的数据时,我注意到只有一个模式中的数据未保留。模式结构、表、索引、约束等看起来不错,但每个表都是空的(模式中每个表的 select count(*) from schema.table 都是 0)。所有其他模式看起来都很好并且包含预期的数据。在尝试解决这个问题时,我到处寻找(无法在网上找到有关此问题的帮助),并自己尝试了许多测试(更改角色、重建架构、权限等等)。什么会导致我的快照保留整个架构结构,但丢失所有数据本身?
postgresql snapshot relational-database amazon-web-services missing-data
我有一个表如下:
我想添加UNIQUE KEY一个(connection_id, parent_container_id, name). 然而,parent_container_id和connection_id是不相交联合——记录必须具有其中之一。因此,我想也许可以使用该值1作为“空”值(即使用自动递增 ID 时的第一个条目),并在表中container为记录创建一个 BASE 条目1。
我想要强制执行唯一性的示例数据:
(connection_id = 1,parent_container = null,名称=“你好”)
(connection_id=1, Parent_container=null, name="hello") # 应该失败
(connection_id=null,parent_container=10,name=“再见”)
(connection_id=null, Parent_container=10, name="goodbye") # 应该失败
这是一种糟糕的使用方法还是这似乎是强制执行唯一性约束的好方法?如果这不是一个好方法,那么什么是更好的方法呢?
更新:我当前的解决方案现在使用带有 md5 哈希值的生成(虚拟)列:
ALTER TABLE container ADD unique_hash2 CHAR(32) GENERATED ALWAYS AS
(MD5(CONCAT(COALESCE(connection_id, '-1'), COALESCE(parent_container_id, '-1'), name))) VIRTUAL UNIQUE
Run Code Online (Sandbox Code Playgroud) 一本特定的书可以有0个或更多相关的绑定(例如精装本,平装本等).所以,说我有本书1和它的相关书籍2,3和4.我可能有一个看起来像这样的表:
book_id related_book_id
1 2
1 3
1 4
Run Code Online (Sandbox Code Playgroud)
现在,我想这也遵循本书2有关1,3和4.所以,我可以扩展表记录以包括这些:
book_id related_book_id
2 1
2 3
2 4
Run Code Online (Sandbox Code Playgroud)
...并为3和做同样的事情4.然后为市场上存在的数百万本书做到这一点.
这是一个好主意吗?我觉得(1,2)和他一样(2,1).
我正在使用MySQL.
我想知道我的数据库结构应该是什么以及应该如何.我很困惑应该如何工作.
它主要用于汽车设计.
要求:1)装配很多.2)在特定的装配中有许多部件.3)在特定部件中可以有材料,工艺,紧固件,工具表.它描述了零件的制造方式和方式.4)材料,工艺,紧固件,工具所有这些都具有不同的属性.
这是一个显示一些关系的电子表格.

我想知道我的数据库结构应该是什么.
我打算使用VB.NET和Microsoft Access作为数据库.我应该将我的数据库更改为SQL还是其他任何?
我有桌子:
Users{UserId ...}
Professors{UserId ...}
Run Code Online (Sandbox Code Playgroud)
我UserId在两个表中都设置为PK并且建立了1:1的关系.
但是,如果我尝试插入新用户,它不起作用,因为它也需要在Professor表中插入.
我想让一个用户在教授表中只能有1条记录,但我也想让它不必存在于教授表中(我不想让所有用户教授:)).
如何在SQL Server Management Studio中设置1到(0 ... 1)的关系?
我知道set强制关键约束NO不是解决方案:)
我是数据库的新手,期待开发一个具有一些高级功能的应用程序.
在这里,我将有一个用户表,就像下面的那样.

因此,在体育专栏中,价值将是用户所玩的运动.他们将是体育表记录中的一些ID.
所以我的问题是如何将这些多个值存储在同一行的同一列中?
谢谢
PS:请注意我是初学者......
mysql database database-design entity-relationship relational-database
我无法找到问题的解决方案,问题是:我真的必须在这里创建一个主键吗?
细节
我的网站在一个数据库中有一个表格translations,我把每个单句/单词放在不同的翻译中.我有这个结构:
id | lang | text
-------------------
01 | 01 | hello
01 | 02 | ciao
01 | 03 | salut
02 | 01 | surname
02 | 02 | cognome
02 | 03 | nom
Run Code Online (Sandbox Code Playgroud)
该字段id连接到一个单词,该字段lang是一个表示翻译的数字(01 =英语,02 =意大利语,03 =法语),并且text是该单词的翻译.
在这种情况下,如果我需要(例如)单词hello我知道它有id = 1然后我可以选择语言.
这是创建这种表的好方法吗?我不确定,但我发现这很简单,因为我可以致电:
SELECT text FROM tablename WHERE id = ? AND lang = ?
Run Code Online (Sandbox Code Playgroud)
你可以看到?因为我用PDO绑定了params.'lang'是从cookie(01,02,03)中检索的常量.
重要提示:这里我没有主键,我只设置id并且lang是唯一的
设计关系数据库时的最佳做法是什么?要在表格之间建立物理关系(从表格到表格的实际线条)或仅模仿关系?
例如
TableA有列
ID, Name
Run Code Online (Sandbox Code Playgroud)
TableB有列
ID, CNIC, TableA_ID
Run Code Online (Sandbox Code Playgroud)
现在,TableA_ID上没有实际的外键约束,但仍然存储映射到TableA 的ID列的值.
我认为后者是好的,我相信前者减速并且有级联操作问题?
database ×6
mysql ×4
sql ×4
postgresql ×2
entity ×1
missing-data ×1
ms-access ×1
snapshot ×1
sql-server ×1
ssms ×1