Questions tagged «database-design»

数据库设计是指定数据库的结构以及逻辑方面的过程。数据库设计的目的是代表某种“话语世界”-事实的类型,业务规则和数据库要建模的其他要求。

5
关系表命名约定
我正在开始一个新项目,并希望从一开始就获取我的表名和列名。例如,我一直在表名中使用复数形式,但是最近学习到的单数形式是正确的。 因此,如果我得到一个表“ user”,然后得到只有该用户拥有的产品,该表应该命名为“ user_product”还是“ product”?这是一对多的关系。 进一步,如果我(出于某种原因)对每个产品有几个产品描述,是“ user_product_description”还是“ product_description”还是“ description”?当然,要设置正确的外键。仅将描述命名是有问题的,因为我也可以具有用户描述或帐户描述等。 如果我想要一个只有两列的纯关系表(很多),该怎么办?“ user_stuff”还是“ rel_user_stuff”之类的?如果是第一个,那么这与“ user_product”有什么区别? 我们非常感谢您提供的任何帮助,如果有人建议您使用某种命名约定标准,请随时进行链接。 谢谢

7
树数据结构的数据库结构
在数据库中实现可自定义(即级别数未知的树结构)树数据结构的最佳方法是什么? 在使用带有外键的表之前,我已经做过一次。 您还可以看到其他哪些实现?这种实现是否有意义?

5
用于审计日志记录的数据库设计
每当我需要设计一个新的数据库时,我都会花很多时间思考如何设置数据库架构以保留更改的审核日志。 此处已经对此提出了一些问题,但是我不同意在所有情况下都存在一种最佳方法: 修订数据库设计 变更日志审核数据库表的最佳设计 有关捕获审计跟踪的数据库设计的想法 我还偶然发现了这篇有关维护数据库更改日志的有趣文章,该文章试图列出每种方法的利弊。它写的很好,并且有有趣的信息,但是这使我的决定更加困难。 我的问题是:是否有我可以使用的参考,也许是一本书或诸如决策树之类的东西,我可以参考这些参考来根据一些输入变量来决定应该走的路,例如: 数据库架构的成熟度 如何查询日志 需要重新创建记录的概率 更重要的是:写入或读取性能 所记录的值的性质(字符串,数字,斑点) 可用存储空间 我知道的方法是: 1.添加创建和修改日期及用户的列 表示例: ID 值_1 值_2 值_3 创建日期 修改日期 由...制作 modified_by 主要缺点:我们失去了修改的历史。提交后无法回滚。 2.仅插入表格 表示例: ID 值_1 值_2 值_3 从 至 已删除(布尔值) 用户 主要缺点:如何保持外键最新?需要巨大的空间 3.为每个表创建一个单独的历史记录表 历史记录表示例: ID 值_1 值_2 值_3 值_4 用户 已删除(布尔值) 时间戳记 主要缺点:需要复制所有审核表。如果架构更改,则也需要迁移所有日志。 4.为所有表创建一个合并的历史表 历史记录表示例: table_name …


6
复合主键中的可为空的列怎么了?
ORACLE不允许在任何包含主键的列中使用NULL值。似乎大多数其他“企业级”系统也是如此。 同时,大多数系统还允许在可为空的列上使用唯一约束。 为什么唯一约束可以具有NULL但主键不能具有NULL?是否有根本的逻辑原因,还是更多的技术限制?

5
PostgreSQL:使用多个数据库,每个数据库有一个模式,还是一个数据库有多个模式,更好?
在对我的问题之一发表评论之后,我在考虑使用具有X模式的数据库是否更好,反之亦然。 我的情况:我正在开发一个Web应用程序,当人们注册时,我会创建(实际上)一个数据库(不,它不是社交网络:每个人都必须有权访问自己的数据,而从不查看其他用户的数据) 。 这就是我以前的应用程序版本(仍在MySQL上运行)所使用的方式:通过Plesk API,对于每次注册,我都这样做: 创建具有有限权限的数据库用户; 创建一个只能由先前创建的用户和超级用户访问的数据库(用于维护) 填充数据库 现在,我需要对PostgreSQL做同样的事情(该项目正在日趋成熟,而MySQL ...不能满足所有需求)。 我需要使所有数据库/方案备份独立:pg_dump可以在两种方式下完美运行,并且对于可以配置为仅访问一个模式或一个数据库的用户而言,pg_dump可以完美地工作。 因此,假设您比我更有经验的PostgreSQL用户,那么您认为什么是对我而言最好的解决方案,为什么? 使用$ x数据库而不是$ x模式会有性能差异吗?哪种解决方案将来会更好维护(可靠性)? 我所有的数据库/方案都将始终具有相同的结构! 对于备份问题(使用pg_dump),最好使用一个数据库和多个模式,一次转储所有模式:恢复将非常简单,将主转储加载到开发计算机中,然后仅转储和还原所需的模式:是另外一个步骤,但是转储所有模式似乎比逐个转储它们要快。 2012年更新 好吧,在过去的两年中,应用程序的结构和设计发生了很大的变化。我仍在使用该one db with many schemas方法,但是仍然为我的应用程序的每个版本提供一个数据库: Db myapp_01 \_ my_customer_foo_schema \_ my_customer_bar_schema Db myapp_02 \_ my_customer_foo_schema \_ my_customer_bar_schema 对于备份,我会定期转储每个数据库,然后将备份移至开发服务器上。 我也在使用PITR / WAL备份,但是,正如我之前说过的那样,我不太可能必须立即还原所有数据库 ...因此它可能会在今年被淘汰(在我看来,这不是最好的方法) )。 从现在开始,即使应用程序结构已完全更改,“单db-多次模式”方法对我来说也非常有效: 我几乎忘记了:我所有的数据库/方案都将始终具有相同的结构! ...现在,每个模式都有其自己的结构,该结构可动态响应用户数据流。

12
在SQL Server数据库中使用单行配置表。馊主意?
在开发购物车应用程序时,我发现我需要根据管理员的偏好和要求保存设置和配置。该信息可以是公司信息,运输帐户ID,PayPal API密钥,通知首选项等任何信息。 创建表以在关系数据库系统中存储单行似乎非常不合适。 存储此信息的适当方法是什么? 注意:我的DBMS是SQL Server 2008,并且编程层是使用ASP.NET(在C#中)实现的。

14
如何为用户定义的字段设计数据库?
我的要求是: 需要能够动态添加任何数据类型的用户定义字段 需要能够快速查询UDF 需要能够基于数据类型对UDF进行计算 需要能够根据数据类型对UDF进行排序 其他资讯: 我主要是在寻找性能 有几百万个主记录可以附加UDF数据 当我上次检查时,当前数据库中有超过5000万个UDF记录 在大多数情况下,UDF仅附加到几千个主记录中,而并非全部 UDF未加入或用作键。它们只是用于查询或报告的数据 选项: 创建一个包含StringValue1,StringValue2 ... IntValue1,IntValue2等的大表。 创建一个动态表,根据需要添加一个新列。我也不喜欢这个主意,因为除非您索引每个列,否则我认为性能会很慢。 创建一个包含UDFName,UDFDataType和Value的表。添加新的UDF时,生成一个View,该View仅提取该数据并将其解析为指定的任何类型。不符合解析条件的项目将返回NULL。 创建多个UDF表,每种数据类型一个。因此,我们会有用于UDFStrings,UDFDates等的表。可能会与#2相同,并在添加新字段时自动生成View。 XML数据类型?我以前没有处理过这些,但是看到了它们的提及。不知道他们是否会给我我想要的结果,尤其是在性能方面。 还有吗

7
在数据库中实现评论和喜欢
我是软件开发人员。我喜欢编写代码,但我讨厌数据库...目前,我正在创建一个网站,允许用户在该网站上将一个实体标记为喜欢(如FB中),对其进行标记和评论。 我在处理此功能的数据库表设计上陷入了困境。如果我们只能对一种类型的事物(例如照片)执行此操作,那么解决方案将是微不足道的。但是我需要为5种不同的功能启用此功能(现在,但我还假设随着整个服务的增长,这个数字可以增长)。 我在这里找到了一些类似的问题,但是没有一个令人满意的答案,所以我再次问这个问题。 问题是,如何正确,有效和弹性地设计数据库,以便它可以存储不同表的注释,喜欢不同表的注释以及它们的标签。一些设计模式作为答案将是最好的;) 详细描述:我有一个表 User与一些用户数据,以及3个表:Photo用照片,Articles用文章,Places用的地方。我想使任何登录的用户能够: 评论这三个表中的任何一个 将其中任何一个标记为喜欢 用标签标记其中的任何一个 我还想计算每个元素的点赞次数以及使用该特定标签的次数。 1 日的做法: a)对于标签,我将创建一个表 Tag [TagId, tagName, tagCounter],然后我会创造很多一对多的关系表为:Photo_has_tags,Place_has_tag,Article_has_tag。 b)评论数相同。 三)我将创建一个表 LikedPhotos [idUser, idPhoto],LikedArticles[idUser, idArticle],LikedPlace [idUser, idPlace]。数喜欢将计算查询(其中,我认为是坏的)。和... 我真的不喜欢这个设计的最后一部分,对我来说很难闻;) 2 次的方法: 我将创建一个表ElementType [idType, TypeName == some table name],该表将由管理员(me)填充,并带有可被喜欢,注释或标记的表的名称。然后我将创建表: a)LikedElement [idLike, idUser, idElementType, idLikedElement]注释和标签的内容相同,每个注释都有正确的列。现在,当我想制作一张喜欢的照片时,我将插入: typeId = SELECT id FROM ElementType WHERE TypeName == 'Photo' …

4
如何为每种产品具有许多参数的多种产品设计产品表
我在表格设计方面没有太多经验。我的目标是创建一个或多个满足以下要求的产品表: 支持多种产品(电视,电话,PC等)。每种产品都有一组不同的参数,例如: 手机将具有颜色,尺寸,重量,操作系统... PC将具有CPU,HDD,RAM ... 参数集必须是动态的。您可以添加或编辑所需的任何参数。 没有每种产品的单独表,如何满足这些要求?


20
可视化数据库架构的好工具?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 有什么好的工具可以可视化现有数据库模式?如果有问题,我正在使用MySQL。 我当前正在使用MySQL Workbench来处理SQL创建脚本转储,但是它笨重,缓慢并且需要手动操作来拖移所有表(如果不是那么慢的话就可以了)。

24
我应如何命名将两个表映射在一起的表?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 假设我有两个表: Table: Color Columns: Id, ColorName, ColorCode Table: Shape Columns: Id, ShapeName, VertexList 我该如何称呼将颜色映射为形状的表? Table: ??? Columns: ColorId, ShapeId

13
Facebook数据库设计?
我一直想知道Facebook如何设计朋友<->用户关系。 我认为用户表是这样的: user_email PK user_id PK password 我用用户的数据(性别,年龄等假设通过用户电子邮件连接的表)来计算表格。 如何将所有朋友连接到该用户? 像这样吗 user_id friend_id_1 friend_id_2 friend_id_3 friend_id_N 可能不是。因为用户数未知,并且会扩大。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.