标签: database-design

具有捆绑产品的产品的数据库设计

我正在为我的零售业务构建一个数据库系统。我设置了一些表格,它们是:

  • 产品
  • 购买
  • 销售量
  • 平衡

所有这些都相互连接,并且能够显示我的库存水平。

我遇到的问题是我还销售捆绑产品 - 其价格与各自的价格不同。
示例:我以 1 美元的价格出售一个橙子,以 1.2 美元的价格出售一个苹果;我以 3.8 美元的价格出售水果套餐 1(2 个橙子和 2 个苹果),以 7 美元的价格出售套餐 2(4 个橙子和 4 个苹果)。

有没有正确的方法来为这些产品包创建关系?

PS:我正在使用 FileMaker Pro 创建这个。

database-design relations filemaker

15
推荐指数
1
解决办法
3760
查看次数

150维空间中的快速最近邻搜索

我想使用任何可能的 RDBMS 创建一个数据库。它将有一个包含大约 150 列的表。目标是执行一些其他对象的最近邻搜索。所以它是150维空间中的NNS。

我已经尝试使用一些明显的方法,例如 L1 或 L2 距离,但当然对于包含多行的表需要花费大量时间。我还尝试查看 KD-tree(注意我没有测试它)和 PG-Strom,但它们对于多维数据并不是一个好的解决方案。

我可以使用数学方法(如 KD-tree)或技术方法(如 PG-Strom)以某种方式提高所描述的搜索速度吗?

我将尝试使用任何可以提高 NNS 速度的 RDBMS。但是 MySQL 和 PostgreSQL 是最适合我的 DBMS。

performance database-design nearest-neighbor

15
推荐指数
1
解决办法
4097
查看次数

带有常量的外键

假设我有一个表 A,它有两列:一列是 的 ID ThingA,另一列是 的 ID ThingB。主键是(ThingA, ThingB).

接下来,我有第二个表,但这次它仅限于表A中具有ThingB = 3. 主键是ThingA,因为ThingB是 3 的常数。

最初,我以为我可以简单地:

FOREIGN KEY (ThingA, 3) REFERENCES A(ThingA, ThingB)
Run Code Online (Sandbox Code Playgroud)

但我了解到事实并非如此,我必须为以下内容创建一个列ThingB

ThingB INT NOT NULL DEFAULT(3) CHECK(ThingB = 3)
Run Code Online (Sandbox Code Playgroud)

然后,

FOREIGN KEY (ThingA, ThingB) REFERENCES A (ThingA, ThingB)
Run Code Online (Sandbox Code Playgroud)

有没有不需要额外列的替代方法,或者DEFAULT + CHECK?一种选择是持久化的计算列,但我也讨厌这个想法,因为它基本上是一种作弊,并且仍然添加了一个具有物理存储的新列。虽然它本身INT不会很大,但在几个表中有几百万行需要它,我宁愿不维护额外的列。

下面是示例 DDL 来说明这种情况:

CREATE TABLE Test1
(
    ThingA INT NOT NULL,
    ThingB INT NOT NULL,
    PRIMARY …
Run Code Online (Sandbox Code Playgroud)

foreign-key database-design sql-server constraint sql-server-2014

15
推荐指数
1
解决办法
2733
查看次数

CURRENT_TIMESTAMP 可以用作 PRIMARY KEY 吗?

可以CURRENT_TIMESTAMP用作PRIMARY KEY?

是否有可能两个或多个不同的 INSERT 得到相同的结果CURRENT_TIMESTAMP

postgresql database-design primary-key timestamp

15
推荐指数
3
解决办法
7987
查看次数

在 postgres 列中仅存储 -1 0 和 1 的正确数据类型是什么?

  • 我只想在一列中存储 3 个状态(如果是 2,我会使用布尔值)
  • 我考虑过使用 ENUM('up', 'down', 'none') 但似乎 ENUM 占用了一些空间
  • 有没有更好的方法在 PostgresQL 列中只存储 -1 0 和 1?

postgresql performance database-design datatypes

15
推荐指数
2
解决办法
3754
查看次数

在 MySQL 中将单列与多个值匹配而无需自联接表

我们有一个表,用于存储问题的答案。我们需要能够找到对特定问题有特定答案的用户。因此,如果我们的表包含以下数据:

user_id     question_id     answer_value  
Sally        1               Pooch  
Sally        2               Peach  
John         1               Pooch  
John         2               Duke
Run Code Online (Sandbox Code Playgroud)

并且我们想要找到回答问题 1 的“Pooch”和回答问题 2 的“Peach”的用户,以下 SQL 将(显然)不起作用:

select user_id 
from answers 
where question_id=1 
  and answer_value = 'Pooch'
  and question_id=2
  and answer_value='Peach'
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是为我们正在寻找的每个答案自行加入表格:

select a.user_id 
from answers a, answers b 
where a.user_id = b.user_id
  and a.question_id=1
  and a.answer_value = 'Pooch'
  and b.question_id=2
  and b.answer_value='Peach'
Run Code Online (Sandbox Code Playgroud)

这是有效的,但由于我们允许任意数量的搜索过滤器,我们需要找到更有效的东西。我的下一个解决方案是这样的:

select user_id, count(question_id) 
from answers 
where (
       (question_id=2 and answer_value = 'Peach') 
    or (question_id=1 and answer_value = 'Pooch')
      )
group …
Run Code Online (Sandbox Code Playgroud)

mysql join database-design

14
推荐指数
3
解决办法
13万
查看次数

是否有用户数据库的标准实现?

我需要为我的网站实现基本的个性化用户功能。这种类型的数据库有标准结构吗?就像将所有用户信息和数据放在一个表中并且每个用户都有自己的行一样是常见的做法,还是应该将这些信息拆分到不同的表中并链接在一起(也许是为了效率?)我不太关心安全性在这一点上,但我显然希望在不久之后进行密码加密。

我试图在谷歌上找到我想要的东西,但无济于事。如果问题需要进一步澄清或任何其他内容,请告诉我。

database-design

14
推荐指数
2
解决办法
2万
查看次数

PostgreSQL 设计工具

我即将设计一个将与 PostgreSQL 一起运行的数据库。我习惯了名为 MySQL Workbench for MySQL 数据库的宏伟工具。它很有用,而且看起来不错,这是我对数据库设计软件的期望。

如果我要学习一种新的数据库设计工具,我希望它成为最受欢迎的工具。因此,我的问题是:在 PostgreSQL 中设计数据库最流行的工具是什么?

postgresql tools database-design

14
推荐指数
2
解决办法
2万
查看次数

将 XML 数据存储在哪种数据类型中:VARCHAR(MAX) 或 XML

我正在使用 SQL Server 2008 为一组新资源定义架构...在这种情况下,每条记录(例如行)都需要存储 XML 片段。时; 虽然不经常;我需要查询 XML 以查找元素和属性值。如果留给我自己的设备,我会倾向于使用XML数据类型,尽管我一直认为这是有问题的。所以这让我想到了我的问题。

鉴于这种情况,在尝试决定将 XML 存储在XML列中还是varchar(MAX)列中时,我应该考虑哪些因素

如果有帮助……这里有一些额外的细节:

  • 尚未决定对这些片段(例如 XSD)使用模式
  • 碎片的大小从小到大不等
  • 所有 XML 都将是格式良好的
  • 在一天的过程中,将收集多达约 10,000 个片段,需要约 3 个月的在线查询支持
  • 对 XML 的查询将全天发生,但应该保持轻量级,很少有这种类型的并发查询

schema sql-server-2008 xml database-design datatypes

14
推荐指数
2
解决办法
1万
查看次数

在 SQL Server 中的表上有多个可为空的 FK 是否被认为是一种不好的做法

在我的 SQL Server 数据库结构中,我有 3 种类型的产品,它们需要有关订单的不同信息。因此,我创建了一张Customers表和三个不同的订单表:OrdersForProductAsOrdersForProductBsOrdersForProductCs。所有订单表在表上都有一对多的关系Customers

我还有另一张桌子,Payments里面有付款细节。但我在这里对如何构建它有疑问。

由于我有多种产品类型,并且客户可能同时订购多种产品,因此我需要将这三个订单表关联到Payments表。

另一个问题是客户可能只订购一种产品。因此,表上的 FK 列Payments需要为nullable.

我的问题是nullable,从长远来看,这些FK 专栏是否会让我头疼?一般来说,在表上拥有可为空的 FK 列是否被认为是一种不好的做法?

sql-server-2008 database-design sql-server sql-server-2008-r2

14
推荐指数
2
解决办法
4097
查看次数