标签: entity-relationship

循环数据库关系.好,坏,例外?

我一直推迟开发应用程序的这一部分纯粹是因为我想以循环的方式做到这一点,但从我记得我的讲师告诉我回到学校的时候,感觉这是一个坏主意.

我有一个订单系统的设计,忽略了与我留下的这个例子无关的一切:

  • 信用卡
  • 顾客
  • 订购

我想这样,

  • 客户可以使用信用卡(0-n)
  • 客户有订单(1-n)
  • 订单有一个客户(1-1)
  • 订单有一张信用卡(1-1)
  • 信用卡可以有一个客户(1-1)(唯一ID,因此我们可以忽略cc号的唯一性,丈夫/妻子可以共享cc实例等)

基本上最后一部分是问题出现的地方,有时信用卡被拒绝,他们希望使用不同的信用卡,这需要更新他们的"当前"卡,但这只能更改用于该订单的当前卡,而不是客户可能在磁盘上的其他订单.

实际上,这在三个表之间创建了圆形设计.

可能的解决方案:要么

创建圆形设计,给出参考:

  • cc参考订购,
  • 客户参考cc
  • 客户参考订购

要么

  • 客户参考cc
  • 客户参考订购
  • 创建引用所有三个表ID的新表,并在订单上放置唯一,以便任何时候只有一个cc可以是该订单的当前

基本上两者都是相同的设计模型,但翻译方式不同,我在这个时间点最喜欢后一种选择,因为它看起来不那么循环,而且更加集中.(如果这甚至有意义)

我的问题是,

  • 如果有的话各有利弊怎么办?
  • 循环关系/依赖的缺陷是什么?
  • 这是规则的有效例外吗?
  • 有什么理由我应该选择前者而不是后者?

谢谢,如果有任何需要澄清/解释,请告诉我.

--update/Edit--

我注意到我说的要求有误.当试图简化SO的事情时,基本上丢球.付款还有另一张表,增加了另一层.捕获,订单可以多次付款,可以使用不同的信用卡.(如果你真的想知道其他形式的付款).

在此陈述这一点是因为我认为潜在的问题仍然是相同的,这只会增加另一层复杂性.

sql rdbms entity-relationship relational-model

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

如何插入具有关系的表?

我只做过没有关系的数据库,但现在我需要做一些更严肃和正确的事情。

这是我的数据库设计: 替代文字

  1. 昆德 = 客户
  2. Vare = 产品
  3. 订单 = 订单(阅读:我要下订单)
  4. VareGruppe = ehm..type?(阅读:汽车、椅子、壁橱等)
  5. VareOrdre = Product_Orders

这是我的 SQL (SQLite) 架构:

CREATE TABLE Post (
    Postnr INTEGER NOT NULL PRIMARY KEY,
    Bynavn VARCHAR(50) NOT NULL
);

CREATE TABLE Kunde (
    CPR INTEGER NOT NULL PRIMARY KEY,
    Navn VARCHAR(50) NOT NULL,
    Tlf INTEGER NOT NULL,
    Adresse VARCHAR(50) NOT NULL,
    Postnr INTEGER NOT NULL 
    CONSTRAINT fk_postnr_post REFERENCES Post(Postnr)
);

CREATE TABLE Varegruppe (
    VGnr INTEGER PRIMARY KEY,
    Typenavn VARCHAR(50) NOT …
Run Code Online (Sandbox Code Playgroud)

sql entity-relationship foreign-keys primary-key

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

文本中的实体关系表示法

实体关系是否有标准(非图形)表示法?

现在我正在使用我自己的janky表示法:

  • 用户>>照片,(1-many)
  • 用户>个人资料,(1-1 hasOne)
  • 个人资料<用户,(1-1属于)
  • 照片<<用户,(很多-1属于)
  • 照片<>标签,(很多)

erd entity-relationship notation relationship

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

数据库系统中用户定义的完整性规则示例?

嘿大家.我目前正在准备考试,并希望了解数据库系统中用户定义的完整性规则的一些示例.据我所知,这意味着我可以为列设置某些条件,并且在插入数据时,它需要满足这些条件.

例如:如果我设置一个规则,ID只需要由5个整数组成,那么当我插入一个ID由整数和一些字符组成的行时,它就不会接受它并返回错误.

有人可以确认并给我一些意见吗?非常感谢你提前!

database entity-relationship relational-database

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

实体框架代码首先是多对多的NullReference

我一直在su.Companies.Add(co)上得到一个NullReferenceException; 线.我认为,通过我的模型定义方式,它应该工作.自动完成,听起来像一个新手,完成这很好.我显然是EntityFramework的新手.

救命?

using (var db = new TicketdocketEntities())
{
  var su = new SiteUser { UserName = model.UserName };
  db.SiteUser.Add(su);
  var co = new Company { Name = "Hello" };
  su.Companies.Add(co);
  db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

楷模

public class Company
{
  [Key]
  public int CompanyId { get; set; }
  public string Name { get; set; }

  public virtual ICollection<SiteUser> SiteUsers { get; set; }
}

public class SiteUser
{
  [Key]
  public int SiteUserID { get; set; }
  public string UserName { get; …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc entity-relationship entity-framework-4 ef-code-first entity-framework-4.1

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

ASP.NET MVC:使用递归助手生成多级菜单

我使用此代码生成菜单,此菜单使用此技术从数据库(类别表)填充项目

局部视图:

@using SarbarzDarb.Helper
@model IEnumerable<SarbarzDarb.Models.Entities.Category>

@ShowTree(Model)

@helper ShowTree(IEnumerable<SarbarzDarb.Models.Entities.Category> categories)
{
        foreach (var item in categories)
        {
            <li class="@(item.ParentId == null && item.Children.Any() ? "dropdown-submenu" : "")">

                @Html.ActionLink(item.Name, actionName: "Category", controllerName: "Product", routeValues: new { Id = item.Id, productName = item.Name.ToSeoUrl() }, htmlAttributes: null)

                @if (item.Children.Any())
                {
                    ShowTree(item.Children);
                }

            </li>

        }
}
Run Code Online (Sandbox Code Playgroud)

我也是这样通过模型从控制器传递到局部视图以上:

public IList<Category> GetAll()
{

        return _category.Where(category => category.ParentId == null)
                        .Include(category => category.Children).ToList();
}
public ActionResult Categories()
{
            var query = GetAll();
            return PartialView("_Categories",query);
} …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc recursion entity-relationship razor ef-code-first

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

Symfony2:错误“属性已经声明,但只能声明一次”

由于我是 Symfony 的新手,我尝试使用 Doctrine 创建实体关系。当我尝试更新架构时,我收到错误“[bundle/entity/file_location”中的属性“report”已声明,但必须仅声明一次”

我遵循了 Symfony 文档,但找不到解决方案。

实体/报告.php

<?php

namespace Aurora\ReportBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Report
 */
class Report
{
    /**
     * @var integer
     */
    private $id;
/**
 * @var string
 */
private $name;

/**
 * @var string
 */
private $description;

/**
 * var array
 */
private $reportFiles;


public function _construct() {
    $this->reportFiles = new ArrayCollection();
}
/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
} …
Run Code Online (Sandbox Code Playgroud)

entity-relationship doctrine symfony

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

具有严格 1-2 关系的实体

我试图了解当关系具有精确性质时,我们如何建模和定义两个实体的基数。让我们说 1 到 2。

例如,如果我有实体 Journey 和 Location。现在每个旅程都有 2 个位置,一个起始位置和一个结束位置。

那么我们如何建模这种关系并将基数放在每个实体(旅程和位置)上。

简单的 google 搜索结果是简单的 1-1、1-m 和 mn 关系解释。但是我们如何将它们限制为恰好 1-2 呢?

database-design entity-relationship er-diagram

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

一对一的关系,只在Laravel单向走

是否有可能/权利在表之间建立只有一种方式的关系?我有一个invoices表,我需要在其他表中引用喜欢commission_payments,membership_paymentsinvoices表不需要a commission_payment_id或a membership_payment_id.换句话说,可能发生不同类型的交易,并且它们都可能附有发票,但发票不需要引用这些交易表.

invoices           commission_payments      membership_payments
---------------    ---------------------    ---------------------
-id                -id                      -id
...                -invoice_id              -invoice_id
                   ...                      ...
Run Code Online (Sandbox Code Playgroud)

我为每个表创建了Eloquent模型.我在其他两个模型上添加了一个hasOne关系invoices.

class CommissionPayment extends Model{
    public function invoice(){
        return $this->hasOne('App\Models\Invoice');
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试访问Comission Payment的附加发票,如下所示:

$com = CommissionPayment::first();
$com->invoice->id;
Run Code Online (Sandbox Code Playgroud)

然后我得到这个错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 
'invoices.commission_payment_id' in 'where clause' (SQL: select * from `invoices` 
where `invoices`.`commission_payment_id` = 15 and `invoices`.`commission_payment_id` is not
null limit 1) 
Run Code Online (Sandbox Code Playgroud)

为什么要 …

entity-relationship database-relations one-to-one has-one laravel

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

如果我们使用自动递增的标识列和PK,则违反3NF

正如Thomas Connolly和Carolyn Begg在180页写的"数据库解决方案第二版"一书所述:

第三范式(3NF)
已经在1NF和2NF中的表,其中所有非主键列中的值只能从主键列而不是其他列中计算出来.

我已经看到很多人们使用标识列的情况,尽管他们的表中已经有了主键列.记录也可以从标识列中得出,如果我们在表中使用自动递增的标识列和主键,是不是违反了3NF?

更新:如果不是这样,哪个列应作为另一个表中的外键引用.主键列或标识列?

database-design entity-relationship third-normal-form database-normalization

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