SQL'in Where cümleleri için bir veritabanı tasarımı üzerinde çalışıyorum. Uygulamam, son kullanıcının bir SQL'in nerede olduğunu belirtmesine izin veren bir iş akışı motorudur. şöyle anda başvurum nerede maddesinin oluşturulmasını destekler: Ben Oluşturduğunuz maddesini seçmek seçkin açılan ettik diğer bazı sayfada"SQL Where Clause" için tablo tasarımını optimum hale getirme
<input type="text" name="clause-name" placeholder="condition name here" />
<br/>
<br/>
<input type="radio" name="where">Complex</input>
<br/>
<div style="display:inline-block">
<select>
<option value="1">ch4 ≥ 1.5</option>
<option value="2">locality = chino</option>
<option value="3">postal_code like [0-9]{5}</option>
<option value="4">date ≤ 2015-12-31</option>
<option value="5">chino and ch4</option>
<option value="6">postalcode and date</option>
<option value="7">chino or postalcode</option>
</select>
<select>
<option>AND</option>
<option>OR</option>
</select>
<select>
<option value="1">ch4 ≥ 1.5</option>
<option value="2">locality = chino</option>
<option value="3">postal_code like [0-9]{5}</option>
<option value="4">date ≤ 2015-12-31</option>
<option value="5">chino and ch4</option>
<option value="6">postalcode and date</option>
<option value="7">chino or postalcode</option>
</select>
</div>
<br/>
<input type="radio" name="where">Simple</input>
<br/>
<div style="display:inline-block">
<select>
<option>ch4</option>
<option>locality</option>
<option>postal_code</option>
<option>date</option>
</select>
<select>
<option>≤</option>
<option><</option>
<option>≥</option>
<option>></option>
<option>≠</option>
<option>=</option>
<option>like</option>
</select>
<input type="text" placeholder="value here" />
</div>
<br/>
<br/>
<button>Create Condition</button>
. Sorun, bu senaryo için tasarladığım veritabanı tablosu. Şu an şöyledir: id
birincil anahtar ve condition1, condition2
kendini yabancı anahtarlar
WhereTable(id, name, feature, op, value, condition1, jointype, condition2)
öyle ki. Ben boş değerler azaltmak için bu tablo tasarımını optimize etmenin bir yolu
table, th, td{
border: 1px solid black;
}
<table>
<tr>
<th>id</th>
<th>name</th>
<th>feature</th>
<th>op</th>
<th>value</th>
<th>condition1</th>
<th>jointype</th>
<th>condition2</th>
</tr>
<tr>
<td>1</td>
<td>ch4≥1.5</td>
<td>ch4</td>
<td>>=</td>
<td>1.5</td>
<td>null</td>
<td>null</td>
<td>null</td>
</tr>
<tr>
<td>2</td>
<td>locality=chino</td>
<td>locality</td>
<td>=</td>
<td>chino</td>
<td>null</td>
<td>null</td>
<td>null</td>
</tr>
<tr>
<td>3</td>
<td>postal_code like [0-9]{5}</td>
<td>postal_code</td>
<td>like</td>
<td>[0-9]{5}</td>
<td>null</td>
<td>null</td>
<td>null</td>
</tr>
<tr>
<td>4</td>
<td>date≤2015-12-31</td>
<td>date</td>
<td><=</td>
<td>2015-12-31</td>
<td>null</td>
<td>null</td>
<td>null</td>
</tr>
<tr>
<td>5</td>
<td>chino and ch4</td>
<td>null</td>
<td>null</td>
<td>null</td>
<td>1</td>
<td>and</td>
<td>2</td>
</tr>
<tr>
<td>6</td>
<td>postalcode and date</td>
<td>null</td>
<td>null</td>
<td>null</td>
<td>3</td>
<td>and</td>
<td>4</td>
</tr>
<tr>
<td>7</td>
<td>chino or postalcode</td>
<td>null</td>
<td>null</td>
<td>null</td>
<td>5</td>
<td>or</td>
<td>6</td>
</tr>
</table>
var mı şu şekildedir: koşul (ch4 >= 1.5 and locality = chino) or (postal_code like [0-9]{5} and date <= 2015-12-31)
için örnek bir tablo olurdu? MySQL'i veritabanı sunucum olarak kullanıyorum.
Hangi tabloyu soruyorsunuz? Bu veritabanı tasarımı ile ilgili, ancak bir HTML
@TAM - Buna bakmak için zaman ayırdığınız için teşekkür ederiz. Ben WhereTable (id, isim, özellik, op, değer, condition1, jointype, condition2) 'tablosu hakkında konuşuyorum. Html tablosu, değerlerin veritabanında nasıl göründüğünün bir örneğidir. Sorun şu ki, her satırda, null'lar 'condition1, jointype, condition2' sütunlarında ya da' feature, op, value 'sütunlarında bulunacaktı. Bu boş değerleri en aza indirmek için tasarımı optimize edip edemeyeceğimi merak ediyorum. –
cevap
Ah, şimdi anladım sanırım.
nesne yönelimli açısından, bir veritabanına böyle bir yapıyı haritaya
Şimdigibi bir devralma yapıya sahip, farklı stratejiler vardır. Her iki uzmanlığın niteliklerini içeren bir tabloya sahip olduğunuz, önerdiğiniz şey olan, sınıf başına tablo-hiyerarşisini kullanmak gayet yasaldır. https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html'da ayrıntılı bir açıklama verilmiştir. Çoğu durumda tek bir tabloya sahip olmak en kolay çözümdür. Tabii ki, veritabanını sorgulayan herkes şemayı nasıl yorumlayacağını bilmek zorunda kalacak, ancak bu diğer stratejiler için de geçerli.
kaynak
2016-03-29 18:45:20 TAM
Nesne yönelimli terimlerle temsil etmenin yolunu beğendim ama çözümünüzdeki CompoundFormula sınıfı ile ilgili problem, solFormula ve rightFormula'nın BasicFormula veya CompoundFormula olabilir. Veri türünü Formula'ya değiştirmek, her ikisinin de süper sınıfı olduğu için burada yardımcı olabilir. Bunu uygulamaya çalışıp çalışmadığına bakacağım. Teşekkürler. –
Bir çekicilik gibi çalıştı. Çok teşekkür ederim. Yardımın için sağol. –
Elbette, Formula olmalıydı. Cevabı ben düzenleyeceğim. – TAM
İlgili konular