badbee
Well-Known Member
Some of the most common questions regarding vapes are about sizes, specifications and compatibilities between units. Answers are given and then quickly forgotten, lost in the pile. What we need is a database where we can put these facts so they can be easily referenced for next time.
A custom and complicated database solution will fall apart as soon as the original creator stops maintaining it. To avoid that the datastore needs to be a single portable file in a format that is both machine readable as well as human readable and editable. That leaves JSON as probably the most suitable data format. Tech familiar users can maintain it directly and anyone who wants to make the presentation pretty can easily do so using standard tools. Adding a queryable and filterable UI layer on top would be fairly easy.
Below is the first draft of a logical schema for the data store entries for vape units and stems. This is intended only for objective information about vapes and is intended to be as simple as possible while covering 95% of the information people care about. Some non-standard vapes and properties won't fit here, and that's acceptable. We want to keep this as simple as possible in order to be useful and maintainable.
If I've missed things, and I probably have, that should be covered to reach that 95% coverage goal, let me know. Highly subjective qualities and things that won't achieve broad agreement should be avoided.
Edit: Used a CODE block to preserve formatting
A custom and complicated database solution will fall apart as soon as the original creator stops maintaining it. To avoid that the datastore needs to be a single portable file in a format that is both machine readable as well as human readable and editable. That leaves JSON as probably the most suitable data format. Tech familiar users can maintain it directly and anyone who wants to make the presentation pretty can easily do so using standard tools. Adding a queryable and filterable UI layer on top would be fairly easy.
Below is the first draft of a logical schema for the data store entries for vape units and stems. This is intended only for objective information about vapes and is intended to be as simple as possible while covering 95% of the information people care about. Some non-standard vapes and properties won't fit here, and that's acceptable. We want to keep this as simple as possible in order to be useful and maintainable.
If I've missed things, and I probably have, that should be covered to reach that 95% coverage goal, let me know. Highly subjective qualities and things that won't achieve broad agreement should be avoided.
Edit: Used a CODE block to preserve formatting
Logical Schema Proposal v1
Code:
VapeUnit
Manufacturer
Name [String]
IsCraftMaker [Yes, No (oneof)]
Name [String]
Version [FloatValue]
DerivedFrom [String (vape name)] /* Comment: List prior version of this vape or base model for clone family */
ReleaseYear [IntegerValue(year)]
EndProductionYear [IntegerValue(year)]
PowerSource [Battery, Externalcontroller, WallPowered, DirectFlame, IndirectFlame, IH (oneof)]
DominantHeatingType [Conduction, Convection, Mixed (oneof)]
SessionType [Session, OnDemand, Both (oneof)]
ControlsType [Analog, Digital, External, Manual (oneof)]
WifiApp [Yes, No (oneof)]
Battery
Replaceable [Yes, No (oneof)]
Chemistry [LiIon, LiPo (oneof)]
Capacity [IntegerValue (mAh)]
CellType [18650, 21700, Pouch, Other (oneof)]
CellCount [IntegerValue]
Charging [Required, NA]
ChargePortType [Barrel, USB-B, MiniUSB, USB-C, Other (oneof)]
SupportsUSBCPD [true, false (oneof)]
ChargeRateMin [FloatValue (A)]
ChargeRateMax [FloatValue (A)]
ChargerVoltage [Integer(V), USB (oneof)]
ChargerWattage [Integer(W), USB (oneof)]
WallPowerSupply [FixedVoltage, VariableVoltage, NA (oneof)]
FixedVoltage [Integer(V), NA]
VariableMin [Integer(V)]
VariableMax [Integer(V)]
SupplyWattage [Integer(W)]
HeatSource [Embeddedcoil, Freecoil, Ribbon, HalogenBulb, External (oneof)]
HeaterMaterial [Stainless, Kanthal, NiChrome, Titanium, Unknown, NA (oneof)]
HeaterPower [IntegerValue(W)]
PhysicalProperties
Body
Width [IntegerValue(mm)]
Height [IntegerValue(mm)]
Length [IntegerValue(mm)]
Weight [IntegerValue(g)]
StemDiameter [IntegerValue(mm), NA]
Screens
Screen
Location [String]
Diameter [IntegerValue(mm)]
Mesh [Coarse, Medium, Fine (oneof)]
Material [Stainless, Brass, Titanium, Unknown, Other (oneof)]
ORings
ORing
Location [String]
InsideDiameter [FloatValue(mm)]
CrossSection [FloatValue(mm)]
LoadSizeTypical [FloatValue(g)]
Capsules [Yes, No]
CapsuleSource [Manufacturer, Other (oneof)]
/* Comment: this is an incomplete sample list, should it just be free text rather an enum list? */
KnownCompatible [Mighty, Venty, Rogue, TinyMight, Other (anyof)]
WaterPipeAdapter [ReplacesStem, ReplacesTop, StemToWhipOnly, BuiltIn, NotAvailable, NA (oneof)]
LoadType [Stemload, Chamberload, PotsOnly, Other (oneof)]
StirringTypical [Yes, No, UserPreference] /* Comment: can this be answered objectively? Just skip it? */
MouthPieceType [SeparateStem, IntegratedStem, WhipStandard, Bags (anyof)]
Stems
SimpleStem /* Comment: definition for simple and mostly one piece stems */
Manufacturer
Name [String]
IsCraftMaker [Yes, No (oneof)]
Name [String]
Length [IntegerValue(mm)]
InsideDiameter [FloatValue(mm), NA]
OutsideDiameter [FloatValue(mm), NA]
Material [SodaGlass, BoroGlass, Quartz, Stainless, Titanium, Wood, Ceramic, Other (oneof)] /* Comment: can it be any combo of these? */
IntegratedScreen [Yes, No]
ChamberDepth [FloatValue(mm), NA]
Modifications [Pinches, Bends, Beads, Pills, SpiralInsert, OtherInsert, Decoration (anyof)]
TargetedVape [String (vape name)]
WPACompatibility [10mm, 14mm, 18mm (anyof)]
KnownCompatibleVapes [String (list of vapes)]
ORings
ORing
Location [String]
InsideDiameter [FloatValue(mm)]
CrossSection [FloatValue(mm)]
BasketScreenCompatibility [StandardRimmed, CustomRimmedOnly, FormedBaskets, Other, NA (anyof)]
Last edited: