标签: database-design

在SQL Server数据库中使用单行配置表.馊主意?

在开发购物车应用程序时,我发现我需要根据管理员的偏好和要求保存设置和配置.此信息可以是公司信息,运输帐户ID,PayPal API密钥,通知首选项等.

创建一个表来在关系数据库系统中存储单行似乎非常不合适.

存储此信息的适当方法是什么?

注意:我的DBMS是SQL Server 2008,编程层是用ASP.NET实现的(在C#中).

sql configuration database-design relational-database

141
推荐指数
4
解决办法
4万
查看次数

关系表命名约定

我正在开始一个新项目,并希望从一开始就获得我的表名和列名.例如,我总是在表名中使用复数,但最近学到的单数是正确的.

那么,如果我得到一个表"用户"然后我得到的产品只有用户会有,那么这个表应该命名为"user_product"还是只是"product"?这是一对多的关系.

进一步说,如果我(由于某种原因)每个产品的几个产品描述,它会是"user_product_description"或"product_description"还是只是"描述"?当然有正确的外键设置..命名它只描述会有问题,因为我也可以有用户说明或帐户描述或其他..

如果我想要一个只有两列的纯关系表(多对多),那会是什么样子呢?"user_stuff"或者类似"rel_user_stuff"的内容?如果是第一个,可以区分它,例如"user_product"?

任何帮助都非常感谢,如果有你们推荐的某种命名约定标准,请随时链接.

谢谢

database database-design coding-style naming-conventions relational-database

141
推荐指数
3
解决办法
7万
查看次数

有没有一个很好的理由我经常使用VARCHAR(255)(而不是另一个长度)?

在多个课程,书籍和工作中,我看到将文本字段定义为VARCHAR(255)作为"短"文本的默认类型.有没有什么好的理由经常选择长度为255,而不是一个漂亮的圆数?在有充分理由(无论今天是否适用)的情况下,过去的某个时间是坚持吗?

当然,我意识到,如果你以某种方式知道字符串的最大长度,那么更严格的限制会更理想.但是如果你使用VARCHAR(255)可能表示你不知道最大长度,那只是它是一个"短"字符串.


注意:我发现这个问题(VARCHAR(255)V TINYBLOB v TINYTEXT),它表示,VARCHAR(Ñ)需要Ñ 1个字节的存储空间用于Ñ <= 255,Ñ 2个字节的存储对的Ñ > 255.这是唯一的原因吗?这似乎有点武断,因为与VARCHAR(256)相比,你只能保存两个字节,你可以通过声明VARCHAR(253)轻松地保存另外两个字节.

database varchar database-design types

138
推荐指数
6
解决办法
11万
查看次数

如何为用户定义的字段设计数据库?

我的要求是:

  • 需要能够动态添加任何数据类型的用户定义字段
  • 需要能够快速查询UDF
  • 需要能够基于数据类型对UDF进行计算
  • 需要能够根据数据类型对UDF进行排序

其他信息:

  • 我主要是在寻找表现
  • 有几百万条Master记录可以附加UDF数据
  • 当我上次检查时,我们当前的数据库中有超过50mil的UDF记录
  • 大多数情况下,UDF仅附加到几千个Master记录中,而不是全部记录
  • UDF未加入或用作键.它们只是用于查询或报告的数据

选项:

  1. 使用StringValue1,StringValue2创建一个大表... IntValue1,IntValue2,...等我讨厌这个想法,但如果有人能告诉我它比其他想法更好,为什么会考虑它.

  2. 创建一个动态表,根据需要按需添加新列.我也不喜欢这个想法,因为除非你索引每一列,否则我觉得性能会很慢.

  3. 创建一个包含UDFName,UDFDataType和Value的表.添加新的UDF时,生成一个View,它只提取该数据并将其解析为指定的任何类型.不符合解析标准的项返回NULL.

  4. 创建多个UDF表,每种数据类型一个.所以我们有UDFStrings,UDFDates等的表.可能和#2一样,并且只要添加新字段就自动生成View

  5. XML数据类型?我之前没有使用过这些,但已经看过它们了.不确定他们是否会给我我想要的结果,尤其是性能.

  6. 别的什么?

sql database database-design user-defined-fields

138
推荐指数
7
解决办法
5万
查看次数

可视化数据库模式的好工具?

是否有可视化预先存在的数据库模式的好工具?如果重要的话,我正在使用MySQL.

我目前正在使用MySQL Workbench来处理SQL创建脚本转储,但是它很笨拙,很慢并且是一个手动过程来拖动所有表(如果它不是那么慢就没关系).

mysql database schema database-design visualization

136
推荐指数
6
解决办法
10万
查看次数

软删除是个好主意吗?

软删除是个好主意还是坏主意?

您只需将其标记为IsDeleted = true,而不是实际删除数据库中的记录,并且在恢复记录后,您可以将其标记为False.

这是一个好主意吗?

最好是物理删除记录,然后将其移动到存档数据库,如果用户想要记录回来,那么软件会在存档中查找记录并重新创建它吗?

sql database database-design data-modeling soft-delete

136
推荐指数
9
解决办法
8万
查看次数

Postgresql:最好使用多个数据库,每个数据库有1个模式,还是1个数据库有多个模式?

在对我的一个问题发表评论之后,我在想是否更好地使用带有X架构的1个数据库,反之亦然.

我的情况:我正在开发一个网络应用程序,当人们注册时,我创建(实际上)数据库(不,它不是社交网络:每个人都必须能够访问自己的数据,永远不会看到其他用户的数据).

这就是我用于我的应用程序的先前版本(仍然在mysql上运行)的方式:通过plesk api,对于每次注册,我这样做:

  1. 创建具有有限权限的数据库用户;
  2. 创建一个只能由以前创建的用户和超级用户访问的数据库(用于维护)
  3. 填充数据库

现在,我需要对postgresql做同样的事情(项目越来越成熟,mysql ......不能满足所有需求)

我需要使所有数据库/模式备份独立:pg_dump在两种方式下都能很好地工作,对于可以配置为仅访问1个模式或1个数据库的用户来说是相同的.

所以,假设你是比我更有经验的potgres用户,你认为对我的情况最好的解决方案是什么,为什么?

使用$ x db而不是$ x schemas会有性能差异吗?什么解决方案将来会更好地维护(可靠性)?

编辑:我差点忘了:我所有的数据库/模式将始终具有相同的结构!

Edit2:对于备份问题(使用pg_dump),使用1 db和多个模式可能更好,一次性转储所有模式:恢复将非常简单地在dev机器中加载主转储然后转储和恢复所需的模式:还有1个额外的步骤,但是倾倒所有架构似乎更快,然后逐个转储它们.

ps:对不起,如果我在文本中忘记了一些'W'字符,我的键盘会受到该按钮的影响;)

更新2012年

那么,应用程序的结构和设计在过去的两年中发生了很大变化.我仍在使用这种one db with many schemas方法,但是,我的应用程序的每个版本都有1个数据库:

Db myapp_01
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema
Db myapp_02
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema
Run Code Online (Sandbox Code Playgroud)

对于备份,我定期转储每个数据库,然后在开发服务器上移动备份.

我也使用PITR/WAL备份,但正如我之前所说,它不太可能我必须立即恢复所有数据库 ..所以它可能会被解雇今年(在我的情况下不是最好的方法).

从现在开始,1-db-many-schema方法对我来说非常有效,即使应用程序结构完全改变了:

我差点忘了:我所有的数据库/模式将始终具有相同的结构!

...现在,每个模式都有自己的结构,可以改变对用户数据流的反应.

database postgresql database-design database-permissions

133
推荐指数
6
解决办法
7万
查看次数

在数据库中存储标签的最有效方法是什么?

我在我的网站上实现了一个类似于stackoverflow使用的标记系统,我的问题是 - 什么是存储标记的最有效方法,以便可以搜索和过滤它们?

我的想法是这样的:

Table: Items
Columns: Item_ID, Title, Content

Table: Tags
Columns: Title, Item_ID
Run Code Online (Sandbox Code Playgroud)

这太慢了吗?有没有更好的办法?

database tags tagging database-design

132
推荐指数
4
解决办法
9万
查看次数

Facebook数据库设计?

我一直想知道Facebook如何设计朋友< - >用户关系.

我认为用户表是这样的:

user_email PK
user_id PK
password 
Run Code Online (Sandbox Code Playgroud)

我用用户的数据(性别,年龄等通过用户电子邮件连接,我会假设)来计算表格.

它是如何将所有朋友连接到此用户的?

像这样的东西?

user_id
friend_id_1
friend_id_2
friend_id_3
friend_id_N 
Run Code Online (Sandbox Code Playgroud)

可能不是.因为用户数量未知并且将会扩展.

sql database-design facebook database-normalization database-table

130
推荐指数
10
解决办法
17万
查看次数

SQL数据库设计的初学者指南

您是否了解如何设计SQL解决方案?

除了基本的语言语法,我正在寻找帮助我理解的东西:

  1. 要构建哪些表以及如何链接它们
  2. 如何设计不同规模(小客户端APP到庞大的分布式网站)
  3. 如何编写有效/高效/优雅的SQL查询

sql database database-design scalability

127
推荐指数
5
解决办法
15万
查看次数