我正在为我的零售业务构建一个数据库系统。我设置了一些表格,它们是:
所有这些都相互连接,并且能够显示我的库存水平。
我遇到的问题是我还销售捆绑产品 - 其价格与各自的价格不同。
示例:我以 1 美元的价格出售一个橙子,以 1.2 美元的价格出售一个苹果;我以 3.8 美元的价格出售水果套餐 1(2 个橙子和 2 个苹果),以 7 美元的价格出售套餐 2(4 个橙子和 4 个苹果)。
有没有正确的方法来为这些产品包创建关系?
PS:我正在使用 FileMaker Pro 创建这个。
我想使用任何可能的 RDBMS 创建一个数据库。它将有一个包含大约 150 列的表。目标是执行一些其他对象的最近邻搜索。所以它是150维空间中的NNS。
我已经尝试使用一些明显的方法,例如 L1 或 L2 距离,但当然对于包含多行的表需要花费大量时间。我还尝试查看 KD-tree(注意我没有测试它)和 PG-Strom,但它们对于多维数据并不是一个好的解决方案。
我可以使用数学方法(如 KD-tree)或技术方法(如 PG-Strom)以某种方式提高所描述的搜索速度吗?
我将尝试使用任何可以提高 NNS 速度的 RDBMS。但是 MySQL 和 PostgreSQL 是最适合我的 DBMS。
假设我有一个表 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
可以CURRENT_TIMESTAMP用作PRIMARY KEY?
是否有可能两个或多个不同的 INSERT 得到相同的结果CURRENT_TIMESTAMP?
我们有一个表,用于存储问题的答案。我们需要能够找到对特定问题有特定答案的用户。因此,如果我们的表包含以下数据:
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) 我需要为我的网站实现基本的个性化用户功能。这种类型的数据库有标准结构吗?就像将所有用户信息和数据放在一个表中并且每个用户都有自己的行一样是常见的做法,还是应该将这些信息拆分到不同的表中并链接在一起(也许是为了效率?)我不太关心安全性在这一点上,但我显然希望在不久之后进行密码加密。
我试图在谷歌上找到我想要的东西,但无济于事。如果问题需要进一步澄清或任何其他内容,请告诉我。
我即将设计一个将与 PostgreSQL 一起运行的数据库。我习惯了名为 MySQL Workbench for MySQL 数据库的宏伟工具。它很有用,而且看起来不错,这是我对数据库设计软件的期望。
如果我要学习一种新的数据库设计工具,我希望它成为最受欢迎的工具。因此,我的问题是:在 PostgreSQL 中设计数据库最流行的工具是什么?
我正在使用 SQL Server 2008 为一组新资源定义架构...在这种情况下,每条记录(例如行)都需要存储 XML 片段。时; 虽然不经常;我需要查询 XML 以查找元素和属性值。如果留给我自己的设备,我会倾向于使用XML数据类型,尽管我一直认为这是有问题的。所以这让我想到了我的问题。
鉴于这种情况,在尝试决定将 XML 存储在XML列中还是varchar(MAX)列中时,我应该考虑哪些因素
如果有帮助……这里有一些额外的细节:
在我的 SQL Server 数据库结构中,我有 3 种类型的产品,它们需要有关订单的不同信息。因此,我创建了一张Customers表和三个不同的订单表:OrdersForProductAs、OrdersForProductBs、OrdersForProductCs。所有订单表在表上都有一对多的关系Customers。
我还有另一张桌子,Payments里面有付款细节。但我在这里对如何构建它有疑问。
由于我有多种产品类型,并且客户可能同时订购多种产品,因此我需要将这三个订单表关联到Payments表。
另一个问题是客户可能只订购一种产品。因此,表上的 FK 列Payments需要为nullable.
我的问题是nullable,从长远来看,这些FK 专栏是否会让我头疼?一般来说,在表上拥有可为空的 FK 列是否被认为是一种不好的做法?
sql-server-2008 database-design sql-server sql-server-2008-r2
database-design ×10
postgresql ×3
datatypes ×2
performance ×2
sql-server ×2
constraint ×1
filemaker ×1
foreign-key ×1
join ×1
mysql ×1
primary-key ×1
relations ×1
schema ×1
timestamp ×1
tools ×1
xml ×1