Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将列链接和添加到数据库表、数据库设计的简单和正确的方法

将列链接和添加到数据库表、数据库设计的简单和正确的方法
EN

Stack Overflow用户
提问于 2012-01-24 01:13:51
回答 1查看 3K关注 0票数 0

我有以下几张表。

具有以下属性的Product

product

  • ProductName的
  • ProductID << ID产品

价格的<<名称

食谱具有以下属性:

Recipe

  • ProductID <<多重productID的
  • RecipeID <<指数和are/可以是 <<多重ingredientID,但对于特定的productID
    • productAsIngredientID <<来说是独一无二的,有时产品本身可以作为一种成分。例如:Bun (可作为bun独立销售,也可添加到Burger)
    • ingredientAmount<< Quantity (double/int)

    配方中。

具有以下属性的Ingredients

  • ingredientID <<它是原料的清单,如(flour)
  • ingredientName
  • ingredientUnitType <<类型的单位,它持有(例如。( gm,ml等)

上述表格的Sampel数据库:

产品:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
|   ProductID    |    ProductName    |   ProductPrice   | 

       12             Bun                     1.5
       15             Ham Burger              5
       13             Chicken Burger          7

成分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
|    ingredientID    |      ingredientName         |   ingredientUnitType   |          

         1                   Salt                           gm
         2                   Yeast                          gm
         3                   Refined Wheat Flour            gm
         4                   Milk                           ml
         5                   Chicken Meat                   gm
         6                   Onion                          gm
         7                   Tomatoes                       gm 

配方:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
| RecipeID | ProductID | ingredientID  |  productAsIngredientID  |  ingredientAmount  |

     1          13                               12                         1
     2          13           5                                             20
     3          13           6                                              7
     4          13           7                                             10
     5          12           1                                              5
     6          12           2                                              2
     7          12           3                                             10
     8          .            .
     9          .            .

在菜谱表中,ProductID不能等于同一行中的productAsIngredientID。但在表配方中,productID和productAsIngredientID都链接到Product.ProductID。

但是,将上述两个表与productID连接存在问题。如果我链接它们,它们中的任何一个都不能具有空值或任何不在成分或Product中的值。

我正在使用Microsoft (MDB)作为数据库,请建议我一个正确的方法来完成这个任务。如何将产品项目本身组织为一种成分本身。

EN

回答 1

Stack Overflow用户

发布于 2012-01-24 01:37:14

您要求的是如何在表之间创建多到多的关系。

这是通过一个单独的“链接表”来完成的,该表包含来自另外两个表的Id (在您的例子中,我们将向配料链接表中添加另一列,金额)。

因此,模式将如下所示(我更喜欢不以表名作为前缀的属性):

产品

  • Id
  • ProductName
  • Price
  • Unit

成分

  • Id
  • IngredientName
  • Unit

配方

  • Id
  • RecipeName

RecipeProducts

Recipe.Id)

  • ProductId

  • RecipeId(外键: Product.Id)

  • Amount

)

RecipeIngredients

Recipe.Id)

  • IngredientId (外键: Ingredient.Id)

  • Amount

)

这就是我通常布局模式的方式,但我对Access并不那么熟悉。

这就是我从访问查询向导中获得的菜谱的所有成分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT Ingredient.IngredientName, RecipeIngredients.Amount, Ingredient.Unit
FROM Ingredient 
INNER JOIN RecipeIngredients 
ON Ingredient.[ID] = RecipeIngredients.[IngredientId] 
WHERE RecipeIngredients.RecipeId = 1;

不是最好的SQL,我想有人可以提供一种更聪明的方法来获得配方的产品和成分。

productAsIngredientId不应该是必要的,因为当一个产品是一个食谱的一部分,它将是一个成分,对吗?否则,您需要将您的表名更改为更符合逻辑的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8984300

复制
相关文章
数据库和表的管理
1、数据库文件类型: ①数据文件 主要数据文件:后缀 .mdf ,有且只有一个,默认已创建,包含启动信息、数据对象 次要数据文件:后缀 .ndf ,可有任意个,默认无 文件流数据:存储图片、音频等文件 ②事务日志文件:后缀 .ldf ,至少一个,默认已创建一个,记录所有事务的SQL语句,用于恢复数据库 2、创建和扩展数据库 文件大小:有一个初始大小,可扩展,最小单位1MB 增长方式:①按百分比②按MB 可限制数据大小:方式:①限制大小②不限制大小 3、收缩数据库:释放不使用的空间 方式:①手动收缩 收缩数据
L宝宝聊IT
2018/06/20
7890
数据库表结构设计原则有哪些_数据库表的设计方法
转载自: http://hi.baidu.com/yzx110/blog/item/0159fadc7b7839a4cd116686.html
全栈程序员站长
2022/09/30
7290
数据库和表的管理文档
实验步骤: 第一步,打开SQL server服务器,用SSMS登录进去,创建一个名为class的数据库,在其中创建course数据表 第二步,表中要包含序号、课程、课程编号、学分、任课教师、上课地点、开始时间、结束时间、备注 要求,序号列为标示符列,从1开始,每增加一门课程其序号自动加1,课程列数据类型为nvarchar(50),课程编号列数据类型为int,该列设为主键,学分列数据类型为tinyint,其值必须大于且小于20,任课教师列数据类型为nvarchar(50),上课地点列数据类型为
企鹅号小编
2018/01/30
1.3K0
数据库和表的管理文档
数据库设计之数据库,数据表和字段等的命名总结
数据库命名规则: 根据项目的实际意思来命名。 数据表命名规则: 1.数据表的命名大部分都是以名词的复数形式并且都为小写; 2.尽量使用前缀"table_"; 3.如果数据表的表名是由多个单词组成,则尽量用下划线连接起来;但是不要超过30个字符,一旦超过30个字符,则使用缩写来缩短表名的长度; 字段命名规则: 1.首先命名字段尽量采用小写,并且是采用有意义的单词; 2.使用前缀,前缀尽量用表的"前四个字母+下划线组成"; 3.如果字段名由多个单词组成,则使用下划线来进行连接,一旦超过30个字符,则用缩写来缩短
赵小忠
2018/01/24
1.4K0
MySQL树形结构(多级菜单)的数据库表设计和查询
想必下面的树形菜单大家都见过,但是是如何实现的,你们有没有想过?说下我是怎么想起设计这个东西的,在一个惠风和畅,风和日丽的午后,我盯着眼前已完成的项目陷入沉思,良久,我将树形菜单的每一级菜单都设计成为了单独的表,正准备写接口将所有的菜单都返回的时候,带我的哥哥给我讲了一遍树形菜单的结构与数据库如何设计,我又再一次陷入了沉思,现在反思一下可能是当时脑子很乱连递归这个基本的思想都有些难以理解了吧。
姜同学
2022/10/27
10.7K0
MySQL树形结构(多级菜单)的数据库表设计和查询
数据库表连接的简单解释
错综复杂的数据,需要建立模型,才能储存在数据库。所谓"模型"就是两样东西:实体(entity)+ 关系(relationship)。
ruanyf
2020/01/21
1.7K0
正确评估SQL数据库性能,你必须知道的原理和方法!
作者:阿特 来源: http://blog.csdn.net/capsicum29/article/details/71480799 数据库是一个很重要的模块,现在来写一个评估数据库的前言,谈谈数据库性能问题所需要了解的内容。 基本概念 性能问题 什么是性能问题?当系统出现性能问题,那么反过来问为什么说出现了性能问题,或者说到底怎么样算性能问题呢? CPU100%,CPU占有率过高?CPU就算是100%,但是客户端反馈超快,算不算性能问题呢? 剩余内存过低?操作系统剩余内存过低有可能是SQL吃完了,所以
小小科
2018/05/04
2.2K0
正确评估SQL数据库性能,你必须知道的原理和方法!
mongo复制数据库和表
collection_name是数据库表名 new_database是目的数据库
周小董
2019/03/25
6.2K0
clickhouse 创建数据库和表
MySQL单条SQL是单线程的,只能跑满一个core,ClickHouse相反,有多少CPU,吃多少资源,所以飞快; ClickHouse不支持事务,不存在隔离级别。这里要额外说一下,有人觉得,你一个数据库都不支持事务,不支持ACID还玩个毛。ClickHouse的定位是分析性数据库,而不是严格的关系型数据库。又有人要问了,数据都不一致,统计个毛。举个例子,汽车的油表是100%准确么?为了获得一个100%准确的值,难道每次测量你都要停车检查么?统计数据的意义在于用大量的数据看规律,看趋势,而不是100%准确。 IO方面,MySQL是行存储,ClickHouse是列存储,后者在count()这类操作天然有优势,同时,在IO方面,MySQL需要大量随机IO,ClickHouse基本是顺序IO。 有人可能觉得上面的数据导入的时候,数据肯定缓存在内存里了,这个的确,但是ClickHouse基本上是顺序IO,用过就知道了,对IO基本没有太高要求,当然,磁盘越快,上层处理越快,但是99%的情况是,CPU先跑满了(数据库里太少见了,大多数都是IO不够用)。 二、创建库
用户5760343
2019/07/05
11.1K0
MySQL 数据库和表操作
MySQL服务器中的 【数据库】 以文件夹的形式存放在data目录下,本章讲解如何优雅地使用SQL命令操作数据库和数据表。
技能锦囊
2020/04/15
6.1K0
【数据库】count(*),count(1)和count(列)
最近写了一些SQL,在用count进行统计的时候,我一般都习惯用count(*),看同事的代码有事会用count(1),那么count(*),count(1)和count(某一列)有什么区别呢?
全栈程序员站长
2022/08/10
8010
mysql数据库(8):获得数据库和表的信息
(1)查看有哪些数据库:show databases;  (2)选择数据库: use chuan  (3)查看该数据库中有哪些表:show tables;  (4)查看表结构:describe pet;
川川菜鸟
2021/10/18
1.1K0
app数据库表的设计_订单数据库设计
登录相关 用户信息表(账户相关) CREATE TABLE UserAccount ( UID INT NOT NULL AUTO_INCREMENT, /* 用户ID */ ParentID INT NOT NULL, /* 父级ID */ UserName VARCHAR(40) NOT NULL, /* 用户名 */ NickName VARCHAR(40), /* 昵称 */ Avatar VARCHAR(40), /* 头像 */ Safeques VARCHAR(40), /* 安全问题 */ SafeAnswer VARCHAR(40), /* 安全问题答案 */ Locked INT NOT NULL , /* 是否锁定 */ LastVisitTime DATETIME, /最后访问时间/ RegisterTime DATETIME, /注册时间/ PRIMARY KEY (UID) ); 用户信息详情表 CREATE TABLE UserDetails ( UID INT NOT NULL REFERENCES UserAccount (UID), /* 用户ID */ Gender INT NOT NULL, /* 性别 */ RealName VARCHAR(40) NOT NULL, /* 真实姓名 */ Mobile VARCHAR(40), /* 手机号 */ Email VARCHAR(40), /* 邮箱 */ BirthDate DATETIME, /* 出生日期 */ IDCard VARCHAR(40) NOT NULL, /* 身份证号 */ Address VARCHAR(40) NOT NULL, /* 地址 */ PlateNum VARCHAR(40) NOT NULL /* 车牌号 */ );
全栈程序员站长
2022/10/02
5630
SAP链接外部数据库的实现方法
上图中,DBMS所填的是MSS,代表是微软的Sql server数据库。链接信息那边写:
SAP梦心
2022/05/10
1.4K0
SAP链接外部数据库的实现方法
SQL2012_创建数据库,创建表,表的内外链接
create table a1( aid int constraint PK_a primary key, age int check(age between 27 and 80), sex int check(sex in('M','F')), tel nvarchar(20) check(tel like'1[3,5,7,8][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') ) create table b2( f n
赵腰静
2018/03/09
1.9K0
树形结构的数据库表设计
程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数据库,都是以二维表的形式记录存储数据信息,因此是不能直接将Tree存入DBMS,设计合适的Schema及其对应的CRUD算法是实现关系型数据库中存储树形结构的关键。
全栈程序员站长
2022/09/06
2.6K0
树形结构的数据库表设计
嵌套评论的数据库表设计
设计嵌套评论数据库表可仿效无限级分类,在表中加一个ParentId字段。嵌套评论页面大致这样:
全栈程序员站长
2022/06/29
8730
嵌套评论的数据库表设计
数据库表的垂直拆分和水平拆分
水平拆分是指数据表行的拆分,表的行数超过 200 万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。
七点一刻
2023/03/09
2.1K0
数据库表的垂直拆分和水平拆分
SQL Server数据库和表的基本管理
我们先来了解SQL Server数据库中的文件类型: 主数据文件:包含数据库的启动信息,指向数据库中的其他文件,每个数据库都有一个主数据文件(有且只有一个),推荐文件扩展名是.mdf; 辅助数据文件:除主数据文件以外的所有数据文件都是次要数据文件,次要数据文件主要是为了扩展数据的硬盘空间(可以有也可以没有),推荐文件扩展名是.ndf; 事务日志文件:包含恢复数据库所有事务的信息,每个数据库中至少有一个事务日志文件(有且必须有一个,可以多个),推荐文件扩展名是.idf; 文件流数据文件:可以使基于SQL的应用程序能在文件系统中存储非结构化的数据,如:文档、图片、音频、视频等。 数据文件由若干个64KB大小的区组成,每个区由8个8KB的连续页组成; 事务日志文件的存储不是以页为单位的,而是由一条条的大小不等的日志记录为单位。 创建数据库之前,需要考虑如下事项: 创建数据库的权限默认授予sysadmin和dbcreator服务器角色成员,服务器角色用于向用户授予服务器范围内的安全特权; 创建数据库的用户将成为该数据库的所有者; 考虑数据文件及日志文件的放置位置; 合理估计数据库的大小合并增长值。 接下来我们简单来一下数据的基本操作:
星哥玩云
2022/08/18
1.3K0
SQL Server数据库和表的基本管理
点击加载更多

相似问题

将条目添加到主数据库表和链接表的更好方法

10

简单的数据库设计和LINQ

20

简单的数据库表设计

64

将表和列列表从数据库添加到数据库

11

数据库设计-存储重复日期和时间的正确方法

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文