Что вниз стороны использования составного/составного первичного ключа?

Вот очень грубый способ сделать это (IMO), но он работает.

Объяснение: ondrop выполнено. Я делаю элемент img неотбрасываемым.

document.getElementById("drag1").setAttribute("draggable", false);

function allowDrop(ev) {
  ev.preventDefault();
}

function drag(ev) {
  ev.dataTransfer.setData("text", ev.target.id);
}

function drop(ev) {
  ev.preventDefault();
  var data = ev.dataTransfer.getData("text");
  ev.target.appendChild(document.getElementById(data));

  if(ev.target.id === "div2"){
      console.log("Running Stop Drop");
      document.getElementById("drag1").setAttribute("draggable", false);
  }
}
<!DOCTYPE HTML>
<html>
<head>
<style>
#div1, #div2 {
  float: left;
  width: 100px;
  height: 35px;
  margin: 10px;
  padding: 10px;
  border: 1px solid black;
}
</style>
</head>
<body>

<h2>Drag and Drop</h2>
<p>Drag the image back and forth between the two div elements.</p>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
  <img src="img_w3slogo.gif" draggable="true" ondragstart="drag(event)" id="drag1" width="88" height="31">
</div>

<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

</body>
</html>

15
задан JKueck 20 September 2008 в 06:38
поделиться

8 ответов

  1. Мог вызвать больше проблем для нормализации ( 2 нФ , " Примечание, что, когда таблица 1NF не имеет никаких составных ключей-кандидатов (ключи-кандидаты, состоящие больше чем из одного атрибута), таблица находится автоматически в 2 нФ ")
  2. более ненужное дублирование данных. Если Ваш составной ключ будет состоять из 3 столбцов, то необходимо будет создать те же 3 столбца в каждой таблице, где это используется в качестве внешнего ключа.
  3. Обычно преодолимый с помощью суррогатных ключей ( чтение об их преимуществах и недостатках )
  4. я могу вообразить хороший сценарий для составного ключа - в таблице, представляющей отношение N:N, как Студенты - Классы, и ключ в промежуточной таблице будет (StudentID, ClassID). Но если необходимо хранить больше информации о каждой паре (как история всех меток студента в классе) тогда, Вы, вероятно, представите суррогатный ключ.
14
ответ дан 1 December 2019 в 02:56
поделиться

Нет ничего неправильно с наличием первичного ключа по сути, но первичный ключ должен идеально быть как можно меньше (с точки зрения числа требуемых байтов). Если первичный ключ будет долог тогда, то это заставит некластерные индексы быть чрезмерно увеличенными в размере.

Принимают во внимание, что порядок столбцов в первичном ключе важен. Первый столбец должен быть максимально выборочным т.е. максимально 'уникальным'. Поиски на первом столбце будут в состоянии искать, но поиски только на втором столбце должны будут просканировать, если нет также некластерный индекс на втором столбце.

5
ответ дан 1 December 2019 в 02:56
поделиться

Я думаю, что это - специализация синтетических ключевых дебатов (использовать ли значимые ключи или произвольный синтетический первичный ключ). Я снижаюсь почти полностью на синтетической ключевой стороне этих дебатов по ряду причин. Это несколько более подходящих:

  • необходимо сохранить зависимые дочерние таблицы на конце внешнего ключа актуальными. Если Вы изменяете значение одного из полей первичного ключа (который может произойти - видят ниже), необходимо так или иначе изменить все зависимые таблицы, где их значение PK включает эти поля. Это немного хитро, потому что изменение значений ключа будет делать недействительным отношения FK с дочерними таблицами, таким образом, Вы будете мочь (в зависимости от ограничительных опций проверки, доступных на Вашей платформе), должны обратиться к приемам как копирование записи на новую и удаление старых записей.

  • На глубокой схеме ключи могут стать довольно широкими - я видел 8 столбцов однажды.

  • Изменения в значениях первичного ключа могут быть неприятными для идентификации в процессах ETL, загружающихся от системы. Примером, который у меня когда-то был случай для наблюдения, было извлечение приложения MIS из страховки, подписывающей систему. В некоторых случаях запись политики была бы снова использована клиентом, изменив идентификатор политики. Это было частью первичного ключа таблицы. Когда это происходит, складская загрузка не знает о том, чем старое значение было так, это не может соответствовать новым данным к нему. Разработчик должен был пойти, перерыв контрольные журналы для идентификации измененного значения.

большинство проблем с несинтетическими первичными ключами вращается вокруг проблем, когда значения PK записей изменяются. Самые полезные приложения несинтетических значений - то, где схема базы данных предназначается, чтобы использоваться, такие как приложение M.I.S., где генераторы отчетов используют таблицы непосредственно. В этом случае короткие значения с фиксированными доменами, такими как коды валют или даты могли бы обоснованно быть помещены непосредственно на таблице для удобства.

4
ответ дан 1 December 2019 в 02:56
поделиться

Я рекомендовал бы сгенерированный первичный ключ в тех случаях с уникальным не пустое ограничение на естественный составной ключ.

, Если Вы используете естественный ключ в качестве основного тогда, необходимо будет, скорее всего, сослаться на оба значения в ссылках внешнего ключа, чтобы удостовериться, что Вы определяете корректную запись.

1
ответ дан 1 December 2019 в 02:56
поделиться

Нужно больше специфики.

Взятый слишком далеко, это может сверхусложнить, Вставляет (Каждый ключ ДОЛЖЕН существовать), и документация, и Ваши чтения, к которым присоединяются, могли быть подозреваемым, если неполный.

Иногда это может указать на дефектную модель данных (составной ключ ДЕЙСТВИТЕЛЬНО, что описано по условию?)

я не полагаю, что существует стоимость производительности... она просто может пойти действительно неправильно действительно легко.

0
ответ дан 1 December 2019 в 02:56
поделиться

Основная оборотная сторона использования составного первичного ключа, то, что Вы перепутаете ад из типичных генераторов кода ORM.

0
ответ дан 1 December 2019 в 02:56
поделиться
  1. , когда Вы se это на схеме - меньше читаемое
  2. , когда Вы используете его на соединении запроса, меньше читаемое
  3. , когда Вы используете его на foregein ключе, необходимо добавить, что проверочное ограничение обо всем атрибуте должно быть пустым или не пустым (если только один является пустым, ключ не проверяется)
  4. обычно потребность больше устройства хранения данных, когда использование это как внешний ключ
  5. некоторый инструмент не управляет составным ключом
0
ответ дан 1 December 2019 в 02:56
поделиться

Рассмотрим пример таблицы с двумя кандидатами ключей: одним простым (с одним столбцом) и одним составным (с несколькими столбцами). Ваш вопрос в этом контексте выглядит следующим образом: «Какой недостаток я могу получить, если я сделаю один ключ« первичным »и выберу составной ключ?»

Сначала подумайте, действительно ли вам нужно продвигать ключ в all: "Само существование PRIMARY KEY в SQL кажется исторической случайностью определенного рода. По словам автора Криса Дэйта, самые ранние воплощения SQL не имели никаких ключевых ограничений и PRIMARY KEY был добавлен к стандартам SQL лишь позже.Проектировщики стандарта, очевидно, взяли термин у EFCodd, который его изобрел, хотя к тому времени первоначальное понятие Кодда было отвергнуто! В SQL выбор ключа PRIMARY KEY является произвольным и зависит от продукта. В ACE / Jet (также известном как MS Access) два основных и часто конкурирующих фактора: хотите ли вы использовать PRIMARY KEY для поддержки кластеризации на диске или хотите, чтобы столбцы, составляющие ключ, выделялись жирным шрифтом в Картинка «Отношения» в пользовательском интерфейсе MS Access; Я в меньшинстве, полагая, что стратегия индексации важнее красивой картинки :) В SQL Server вы можете указать кластерный индекс независимо от PRIMARY KEY , и, похоже, это не дает никаких преимуществ для конкретного продукта. Единственным оставшимся преимуществом, по-видимому, является тот факт, что вы можете опустить столбцы PRIMARY KEY при создании внешнего ключа в SQL DDL, что является стандартным поведением SQL-92 и в любом случае этого не делает. Мне это кажется таким уж большим делом (возможно, еще одна вещь, которую они добавили в Стандарт, потому что это была функция, уже широко распространенная в продуктах SQL?) Итак, это не случай поиска недостатков, скорее, вам следует обратить внимание на посмотрите, какое преимущество , если оно есть, ваш продукт SQL дает ПЕРВИЧНЫЙ КЛЮЧ . Другими словами, единственный недостаток выбора неправильного ключа состоит в том, что вы можете упустить данное преимущество.

В-третьих, вы скорее имеете в виду использование искусственного / синтетического / суррогатного ключа для реализации в вашей физической модели кандидата key из вашей логической модели, потому что вы обеспокоены тем, что использование естественного ключа во внешних ключах и соединениях таблиц приведет к снижению производительности? Это совершенно другой вопрос и во многом зависит от вашей «религиозности».

1
ответ дан 1 December 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: